grep 是在linux查找文本过程最常用的命令,熟悉grep的一些常用命令,可以在个别时候有效提高工作效率。
场景一:需要查找一个目录及子目录所有文件中出现 aaa 但是同时不能出现bbb的行,查找不区分大小写
grep -rin 'aaa'|grep -v bb
解释:
r 递归查找
i 不区分大小写
n 显示行号
v 反向匹配(形象点就是不允许出现的)
场景二:待查找的文件有几千万行,你的规则有几百条
grep -f patter.txt file
f :后跟规则文件,把每条正则表达式写入patrern.txt中
场景三:你需要使用linux扩展正在表达式
grep -E pattern file
默认情况下grep只支持基础正在表达式,E选项可以支持扩展表达式(也可以待地gerp -E 为egrep)
什么是扩展正在表达式?
linux扩展正在表达式 是在原有标准正则表达式
+ 重复一个或者一个以上的前一个字符,如a+表示一个以上的a
? 0个或者1个前一个字符,如a?表示空白或者1个a
| 或,如要查找aa或者bb这两个字符串,egrep -n 'aa|bb file
() 查找组字符串,如查找head或者had, egrep -n 'h(ea|a)d' file
()+ 多个重复组的判别,如查找A开头C结尾,中间有一个以上的xyz或aaa,egrep -n 'A(xyz|aaa)+C' file
场景四:你想看到被匹配的行周围(前后)的行
grep -A2 -B2 'aaa' file
-A :after,显示匹配行后的行 -A2 显示 后2行
-B :before,显示匹配行前的行 -B2 显示 前2行
如果你真的同时需要显示,前后各n行,那么你可以用-C选项
grep -C2 'aaa' file 作用与-A2 -B2完全相同
'