我有一个包含许多日志行的文件。
我想要返回包含单词“fail”但不包含以下模式的文件:
Failed any test here _fr in Pro-any text here
因此,如果它包含:Pro 中的 _fr
然后忽略该行,即使其中有失败一词。
答案1
让我们考虑这个测试文件:
$ cat >test.log
keep fail
omit fail _fr in Pro-
要查找符合条件的所有行:
$ awk '/[fF]ail/ && ! /_fr in Pro-/' test.log
keep fail
仅打印包含符合条件的行的文件的名称:
$ awk '/[fF]ail/ && ! /_fr in Pro-/ {print FILENAME; exit}' *.log
test.log
怎么运行的:
awk 隐式地逐行读取文件。条件/[fF]ail/ && ! /_fr in Pro-/
匹配任何包含Fail
或fail
但不包含 的行_fr in Pro-
。在 awk 中&&
表示逻辑与,而!
表示逻辑非。
拒绝_fr in Pro-
两者_en in Pro-
考虑这个测试文件:
$ cat test.log
keep fail
omit fail _fr in Pro-
omit fail _en in Pro-
要拒绝这两种形式:
$ awk '/[fF]ail/ && ! /_(fr|en) in Pro-/' test.log
keep fail