
我有一個包含一堆日誌行的檔案。
我想返回其中包含單字“失敗”但不包含模式的文件:
Failed any test here _fr in Pro-any text here
所以如果它包含:Pro-中的_fr
然後忽略該行,即使其中包含“fail”一詞。
答案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