我将正则表达式模式列表传递给 grep
以检查系统日志文件。它们通常匹配 IP 地址和日志条目;
grep "1\.2\.3\.4.*Has exploded" syslog.log
这只是一个模式列表,例如我在循环中传递的“1\.2\.3\.4.*已爆炸”
部分,因此我无法通过“例如,-v”。
我很困惑尝试执行与上述相反的操作,并且不匹配具有特定IP地址和错误的行,因此“!1.2.3.4.*Hasexploded”将匹配任何内容的系统日志行除了 1.2.3.4 告诉我它已经爆炸了。我必须能够包含一个不匹配的 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
最佳答案
grep
匹配,grep -v
则相反。如果您需要“匹配 A 但不匹配 B”,您通常使用管道:
grep "${PATT}" file | grep -v "${NOTPATT}"
关于regex - Grep 正则表达式不包含字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411616/