linux查找文件内容命令

栏目: Linux 发布时间:2022-02-24

文件内容查找是必备的基础技能。本文对 Linux 环境下文件内容查找方法做一个总结。

准备工作

创建 3 个文件用于下文 demo 演示

1、doc1.txt

lucy
lily
tom

2、doc2.txt

lucy is 18 years old
marry is 16 years old
Lucy will be 19 soon years old soon
copyright©www.tides.cn

3、directory1/doc3.txt

lucy is a girl
tom is a boy

快速创建上述 3 个文件的方法:

echo -e 'lucy\nlily\ntom' > doc1.txt
echo -e 'lucy is 18 years old\nmarry is 16 years old\nLucy will be 19 soon years old soon\ncopyright©www.tides.cn' > doc2.txt
mkdir directory1
echo -e 'lucy is a girl\ntom is a boy' > directory1/doc3.txt

使用 grep 查找包含指定内容的文件

该命令会列出匹配的文件和匹配的内容

$ grep lucy ./*.txt
./doc1.txt:lucy
./doc2.txt:lucy is 18 years old

使用 grep -n 查找文件内容并显示行号

$ grep -n lily ./doc1.txt
2:lily

使用 grep -r 递归查找包含特定内容的文件

递归查找包含 “lucy” 的文件

$ grep -r lucy ./
.//directory1/doc3.txt:lucy is a girl
.//doc1.txt:lucy
.//doc2.txt:lucy is 18 years old

递归查找包含 “tom” 的文件

 $ grep -r tom ./
.//directory1/doc3.txt:tom is a boy
.//doc1.txt:tom

使用 grep -l 查找包含特定内容的文件

该命令只列出匹配文件名称,不展示具体内容

递归查找包含 “lucy” 的文件

$ grep -rl lucy ./
.//directory1/doc3.txt
.//doc1.txt
.//doc2.txt

递归查找包含 “tom” 的文件

$ grep -rl tom ./
.//directory1/doc3.txt
.//doc1.txt

使用 grep -L 查找不包含指定内容的文件

查找内容不包含 “tom” 的文件

$ grep -rL tom ./
.//doc2.txt

查找内容不包含 “lily” 的文件

$ grep -rL lily ./
.//directory1/doc3.txt
.//doc2.txt

使用 grep -i 忽略大小写进行内容查找

$ grep -ri Lucy ./
.//directory1/doc3.txt:lucy is a girl
.//doc1.txt:lucy
.//doc2.txt:lucy is 18 years old
.//doc2.txt:Lucy will be 19 soon years old soon

使用 grep -v 查找不包含指定内容的文件行

$ grep -rv 'tom' ./
.//directory1/doc3.txt:lucy is a girl
.//doc1.txt:lucy
.//doc1.txt:lily
.//doc2.txt:lucy is 18 years old
.//doc2.txt:marry is 16 years old
.//doc2.txt:Lucy will be 19 soon years old soon
.//doc2.txt:copyright©www.tides.cn

使用 grep -c 统计匹配总行数

统计包含 lucy 的文件并显示出现的次数

$ grep -rc lucy ./
.//directory1/doc3.txt:1
.//doc1.txt:1
.//doc2.txt:1

统计包含 lucy 的文件并显示出现的次数,忽略大小写

$ grep -ric lucy ./
.//directory1/doc3.txt:1
.//doc1.txt:1
.//doc2.txt:2

find 与 grep 配合使用

实例:在最近 3 天的日志文件中查找谷歌搜索爬虫的访问记录

$ find /home/tides/logs -mtime -3 | xargs grep 'Googlebot'

日志文件检索实战

1、在日志文件中搜索 “出错了” 三个字,搜索到的结果按时间倒序排序

方法 1:

$ ls -t | xargs grep '出错了'

方法 2:

$ cat $(ls -t) | grep '出错了'

2、在近 3 天的日志文件中搜索 “出错了” 三个字,搜索到的结果按时间倒序排序

$ find /home/tides/logs -mtime -3 -name '*.log*' | xargs ls -t | xargs grep '出错了'

总结

我们使用 grep 搭配各种参数来查找文件

1、grep -r 递归查找

2、grep -n 搜索内容并显示行号

3、grep -l 只列出匹配的文件名,不展示匹配内容

4、grep -L 只列出不包含搜索内容的文件名,不展示匹配内容

5、grep -c 统计匹配频次

6、grep -v 查找不包含指定内容的文件行

7、grep -i 忽略大小写匹配

另外,对于一些复杂查找,我们可以搭配 find 和 grep 来完成。

本文地址:https://www.tides.cn/p_linux-find-file-by-content-keywords

标签: grep 查找文件