man grep
搜二进制文件
加-a 参数
-a, --text
Treat all files as ASCII text. Normally grep will simply print “Binary file ... matches” if files contain binary characters. Use of this option forces grep to output lines matching the specified pattern.
解决 “Binary file 文件名 matches” 的问题,有匹配但没法有输出内容。一般是日志文件输出时文件起始位有异常,导致日志文件被识别为二进文件了
![在这里插入图片描述](https://img-blog.csdnimg.cn/7ae310b4dc7648e6b2a6ec2fb5fcc82c.png
或表达式搜索
-E 加多个表达式
grep -a -E "test1|test2" *
与表达式搜索
即多次grep
grep "test1" 文件名 | grep "test2"
常用参数
统计行数 -c
有时候想知道搜索到的内容有多少行,可能大家会结合wc命令来使用,其它可以直接用 "-c参数"就行了
示例如下
$ grep -c "login" test.log
5
# 结合wc可能是这样用的
$ grep "login" test.log | wc
5 5 196
显示颜色 --color
即搜索到的内容中关键字可以显示颜色,我使用的是iterm2,默认已经是显示的了
显示行号 -n
过滤内容 -v
可以结合 -E 过滤多个关键字(过渡多个内容)
$ grep -v -E "login|roc" test.log
root:x:0:0:root:/root:/bin/bash
(中间省略数十行)
test:x:502:502::/home/test:/bin/bash
leo:x:503:503::/home/leo:/bin/bash
忽略大小 -i
忽略大小写,即不区分大小写
$ grep -i "home" test.log
test:x:502:502::/home/test:/bin/bash
leo:x:503:503::/home/leo:/bin/bash
roc:x:504:504::/home/roc:/bin/bash
HOME
显示文件 -l or -L
列出搜索到的内容的文件,可搜索不到文件-L
$ grep -l "home" test.log
test.log
匹配单词 -w
强匹配的搜索
$ grep -w "HOME" test.log
HOME
基本正则表达式和扩展正则表达式
世界上的正则表达式种类繁多且复杂,面对这样的状况,POSIX 将正则表达式进行了标准化,并把实现方法分为了两大类:
基本正则表达式(BRE)
扩展正则表达式(ERE)
两者的区别,更多的是元字符的区别。
在基本正则表达式(BRE)中,只承认“^”、“$”、“.”、“[”、“]”、“*”这些是元字符,所有其他的字符都被识别为普通字符。
而在扩展正则表达式(ERE)中在扩展正则表达式(ERE)中,则在BRE的基础上增加了“(”、“)”、“{”、“}”、“?”和“+”、“|”等元字符。