Grep正则表达式不包含一个字符串

25 浏览
0 Comments

Grep正则表达式不包含一个字符串

我将一些正则表达式模式列表传递给grep检查一个syslog文件,通常它们匹配一个IP地址和日志入口;

grep "1\.2\.3\.4.*Has exploded" syslog.log

这仅仅是一些模式列表,比如我传递了\"1\\.2\\.3\\.4.*爆炸了\"部分,用一个循环来执行,所以我不能传递\"-v\",例如。

我尝试着做上述反向操作,不匹配特定IP地址和错误的行,所以\"!1.2.3.4.* 爆炸了\"将匹配除了1.2.3.4以外的syslog行,告诉我它已经爆炸了。我必须能够包括一个IP地址以使其不匹配。

我在Stack Overflow上看到了一些类似的帖子,但是它们使用我似乎无法与grep配合工作的正则表达式模式。有什么将适用于grep的工作示例吗?

这在一个像这样的脚本中发生;

patterns[1]="1\.2\.3\.4.*Has exploded"
patterns[2]="5\.6\.7\.8.*Has died"
patterns[3]="\!9\.10\.11\.12.*Has exploded"
for i in {1..3}
do
  grep "${patterns[$i]}" logfile.log
done

admin 更改状态以发布 2023年5月20日
0
0 Comments

(?

你需要使用-P选项来运行这个(Perl正则表达式),所以命令是:

grep -P '(?

试试这个。它使用负回顾后断言来忽略前面有1.2.3.4的行。

0
0 Comments

grep命令匹配,grep -v命令则是取反。如果您需要“匹配 A 但不匹配 B”,通常可以使用管道:

grep "${PATT}" file | grep -v "${NOTPATT}"

0