linux查找文件内容命令
文件内容查找是必备的基础技能。本文对 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