grep包含xx不包含yy的正则表达式
日志排查中,我们需要查找除了某些特定错误日志之外的剩余错误日志,并打印上下文;
三个要求:
- 包含错误内容;
- 排除特定的错误日志;
- 打印上下文;
如果不需要打印上下文;可以采用如下:grep 'XX' |grep -v 'YY'
如果需要打印上下文,必须先用正则表达式一次性匹配条件1和条件2的行,然后 -C 参数输出上下文;
正则表达式中,正向否定预查表达式(pattern1(?!pattern2))可以满足此要求;
参考https://www.runoob.com/regexp...中的描述:
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
grep -P 才能支持此正则表达式;
正确写法如下:grep -C 20 -P 'XX(?!.*YY)'
错误写法如下:grep -C 20 -P 'XX.*(?!YY)'
正向否定预查,在任何不匹配pattern的字符串开始查找,比如待匹配字符串是"XX1111YY", 错误写法表达式下, 第三个字符1 也是不满足pattern的,从这个位置查找"XX" 是满足"XX.*"条件的, 所以最终匹配了所有XX的行;
现实的例子如: grep -C 20 -P 'ERROR(?!YY)'
python3下拷贝工具调研
zed2015阅读 315
Bash 常用脚本片段
捏造的信仰赞 5阅读 1.7k评论 1
工具篇:iTerm与Zsh
super白赞 4阅读 4.7k
麒麟操作系统 (kylinos) 从入门到精通 - 常用软件安装 - 第三篇 常用软件安装(windows下的习惯)
码上世界赞 3阅读 7.3k评论 17
深入剖析容器网络和 iptables
张晋涛赞 3阅读 1.2k
Metasploit实现木马生成、捆绑及免杀
白风之下赞 1阅读 9k
麒麟操作系统 (kylinos) 从入门到精通 - 办公环境 - 第十三篇 字体安装与windows字体的利用
码上世界赞 2阅读 3.7k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。