2017-09-15 111 views
-2

我有一個例外文件exception.txt,其中包含昨天發生的所有異常行。如何從我的日誌文件中篩選日誌

例子:

Null pointer exception 
Socket exception 
Network exception 
End of file exception. 

我也有過濾文件filter.txt,其通過過濾這些線路包含了一些例外的關鍵字,如

End of file exception 
Null pointer exception 

我想創建一個newexception.txt文件,shell腳本在filter.txt中提及。 基本上它應該是exception.txt的副本,忽略來自filter.txt的行。

什麼是最好的方法來做到這一點?

回答

0

您可以從您的過濾器文件中讀取所有行,並形成從它正則表達式:

lines=`cat filter.txt` 
regex=${lines//$'\n'/|} 
egrep -v "$regex" exception.txt 

這將通過與|更換新行扁平化的過濾器行成一個字符串,那麼你的正則表達式看起來像End of file exception|Null pointer exception。這樣您也可以使用自己形成正則表達式的過濾器關鍵詞,如so* exception。 注意這需要bash。

+0

這不起作用。即使給了filter.txt和exception.txt的完整路徑,我也沒有看到任何輸出 – chandan

+0

@chandan您需要在bash shell中鍵入它,或者如果是腳本,則需要添加'#!/ usr/bin/bash'行。 – yacc

+0

我這樣做,但仍然沒有工作產生任何輸出。 – chandan

1

如果你知道你有關於filter.txt的關鍵字。最簡單,也許最快的方法是grep,使用-v選項。

grep -v -e 'keyword1' -e 'keyword2' exception.txt