用grep的正确写法,你得用perl regex语法,假设所有AAA在BBB前面:
grep -C 5 -P 'AAA(?!.*BBB)' 1.log
如果不确定AAA和BBB哪个在前面,就把在前面和在后面两种情况都写进去
grep -C 5 -P 'AAA(?!.*BBB)|(?!.*BBB)AAA' 1.log
更正:分析了一下,后一种情况已经涵盖了全部条件,因为.*最大贪婪。
所以直接用后一种就行了。
grep -C 5 -P '(?!.*BBB)AAA' 1.log
但输出结果由于你要求显示上下n行,这个与不包含产生了矛盾,因为当前行不包含,不代表当前行的上下n行也不包含,只是grep对不包含的结果不会对关键词高亮显示而已。
所以你还需要明确你的需求。
※ 修改:·poocp 于 Oct 30 16:41:16 2021 修改本文·[FROM: 222.212.168.*]
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 222.212.168.*]
修改:poocp FROM 222.212.168.*
FROM 222.212.168.*