grep包含xx不包含yy的正则表达式

日志排查中,我们需要查找除了某些特定错误日志之外的剩余错误日志,并打印上下文;
三个要求:

  1. 包含错误内容;
  2. 排除特定的错误日志;
  3. 打印上下文;

如果不需要打印上下文;可以采用如下:
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)'

15 声望
1 粉丝
0 条评论
推荐阅读
python3下拷贝工具调研
- [链接]- pickle.dumps 有缓存功能,同一个对象的多次dumps, 不会重复计算;Thepicklemodule keeps track of the objects it has already serialized, so that later references to the same object won’t be ...

zed2015阅读 315

Bash 常用脚本片段
这段脚本非常有用,你只要在你的脚本开头加上下面的内容,就能以 --param value 的格式解析参数。由于这段脚本尽可能写的短小不占空间,所以格式方面会要求所有的参数都有值,例如不接受无参数的 --daemon,而必...

捏造的信仰5阅读 1.7k评论 1

工具篇:iTerm与Zsh
iTerm2支持许多的主题配色,可以自己定义,也可以参考网上现成的主题配色。我个人比较喜欢draculatheme配色。支持item,vim,phpstorm , 下方存在主题官网路径,按照教程安装即可。

super白4阅读 4.7k

麒麟操作系统 (kylinos) 从入门到精通 - 常用软件安装 - 第三篇 常用软件安装(windows下的习惯)
本篇内容大部分从应用商店进行安装,部分通过官网下载,少部分通过命令行安装。1.原生应用1.1钉钉1.2飞书1.3 蓝信1.4 腾讯文档1.5 金山文档1.6 搜狗输入法(拼音)1.7 五笔输入法1.8 libreoffice官方也带了WPS,...

码上世界3阅读 7.3k评论 17

封面图
深入剖析容器网络和 iptables
Docker 能为我们提供很强大和灵活的网络能力,很大程度上要归功于与 iptables 的结合。在使用时,你可能没有太关注到 iptables 的作用,这是因为 Docker 已经帮我们自动完成了相关的配置。

张晋涛3阅读 1.2k

封面图
Metasploit实现木马生成、捆绑及免杀
在一次渗透测试的过程中,避免不了使用到社会工程学的方式来诱骗对方运行我们的木马或者点击我们准备好的恶意链接。木马的捆绑在社会工程学中是我们经常使用的手段,而为了躲避杀毒软件的查杀,我们又不得不对木...

白风之下1阅读 9k

麒麟操作系统 (kylinos) 从入门到精通 - 办公环境 - 第十三篇 字体安装与windows字体的利用
正常情况下,系统下的wps或libreoffice用到的字体都已默认安装。但有时候一些ttf字体或者microsoft office下一些字体需要安装。我们可以在安装好office、acrobat之后,将C:\windows\Fonts文件夹中的字体(我是win...

码上世界2阅读 3.7k

封面图
15 声望
1 粉丝
宣传栏