grep常用选项:
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
--color :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
-b,--byte-offset 将可执行文件binary当作文本文件来搜索
-c,--count 仅显示找到的行数
-i , --ignore-case 忽略大小写
-n,--line-number 显示行号
-v, --revert-match 取反,列出没有“关键词”的行
-w, --word-regex 按单词搜索,仅匹配这个字符串
-r 逐层便利目录查看
--color 匹配到的行高亮显示
--include 指定匹配的文件类型
--exinclude 过滤掉不需要匹配的文件类型
-A: 显示匹配行及后面多少行, 如: -A3, 则表示显示匹配行及后3行
-B: 显示匹配行及前面多少行, 如: -B3, 则表示显示匹配行及前3行
-C: 显示匹配行前后多少行, 如: -C3, 则表示显示批量行前后3行
1.根据匹配内容过滤:grep "com.test.demo" a.log
2.在当前目录多个文件中搜索关键字starting:grep "starting" * --color
3.统计当前目录下所有文件中哪些文件包含关键字error:grep -"error" *
4.统计当前目录下对应的文件中关键字error出现的行数:grep -c "error" log_logcat@20221109_08-29-39-717-PC_807.log
5.搜索关键字时,尤其时关键词为英语时,可能存在的大小写导致搜索遗漏:grep -i "starting" a.log
6.如果想显示搜索结果所在的行号,可通过-n 参数:
grep -n "com.test.demo" a.log
7.在当前目录中查找匹配的文件名:ls -all | grep "20221109"
8.查看一段时间的日志:grep "11-09 08:2[6-8]" a.log --color
如下搜索打印时间在11-09 08:26到11-09 08:28之间的log信息
9.查找匹配a或者匹配o的行 的信息:grep -e a -e o test.txt
10.查看既包含a又包含o的行: grep a test.txt | grep o
查看多个文件匹配包含字母a的行:
grep a test.sh test.txt
匹配查询内容的前n行,后n行,前后n行
1.显示匹配行前2行:
grep a test.txt -A2
2.显示匹配行后2行:grep a test.txt -B2
- 显示匹配行前后2行:
grep a test.txt -C2
匹配字符不区分大小写:
grep -i a test.txt
匹配正则表达式(匹配小写a-z之间的5个字符,即包含5个小写字母的字符):
grep -e '[a-z]{5}' test.txt
统计包含a的行数:
grep -c a test.txt
16.遍历当前目录及子目录包含a的行: grep -rI a .
这里不加-I会出现上面内存问题,这是因为grep -r查找的范围会访问所有这个目录下的文件,包括二进制文件,加上-I参数不匹配查询二进制文件,可以解决这个问题。
17.遍历当前目录及所有子目录,查找所有.txt类型的文件中包含a的字符:
grep -rI a --include="*.txt" .
18.查找包含非“a”开头的行:grep ^[^a] test.txt
grep可用于shell中。grep通过返回一个状态值来说明搜索的状态,结果{0:成功,1:不成功,2:搜索的文件不存在}