我嘗試按功能過濾日誌檔案例如:
195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&xxxx...
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer&xxxx...
197.xx.x.x - - [13/Apr/2017:09:10:xx +0200] "POST /userx/index.php?m=meeting&xxxx...
197.xx.x.x - - [13/Apr/2017:09:20:xx +0200] "POST /userx/index.php?m=dashboard&xxxx...
在這種情況下,我的功能是聯絡人、客戶、會議、儀表板,我嘗試忽略預設的歡迎頁面。我用了
awk '$7 !~ /m=dashboard/ ' log file
我的問題是我是否可以忽略文件中的更多功能?
cat file:
dashboard
meeting
為了只有這一行:
195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer
答案1
sed '/\//!{H;d};G;/m=\(.*\)\n.*\1/d;P;d' file log
說明:先讀取file
過濾器關鍵字,然後讀取日誌檔。包含 no 的行/
被解釋為關鍵字並附加到保留空間 ( H
)。其他行將附加保留空間 ( G
),並且如果 後面的關鍵字m=
在關鍵字清單 ( /m=\(.*\)\n.*\1/d
) 中重複,則將被刪除。如果沒有,則列印時不含附加保留空格 ( P
)。
答案2
由於你的問題現在似乎更有意義,我認為你正在尋找這樣的東西:
awk -F= 'NR==FNR{l[$NF]=1; next} { if (!l[$NF]) print;}' ignore_words your_log_file
編輯
正如 Sundeep 在上面的評論中指出的,您可以使用 grep,如下所示:
grep -Fvf ignore_words log_file
若要了解選項的-Fvf
用途,請參閱man grep
頁面。