使用正規表示式的 Grep 文件

使用正規表示式的 Grep 文件

我有一個包含一堆日誌行的檔案。

我想返回其中包含單字“失敗”但不包含模式的文件:

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-/符合任何包含Failfail但不包含 的行_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

相關內容