2013-03-13 181 views
0

我正在處理一個問題,我不知道是否有可能解決這個問題,希望你能幫助我,讓我們看看:正則表達式是否匹配包含單詞的X字符串?

我正在使用Monit來監視一些日誌文件,我想它尋找一個特定的表達,但我只想要一個積極的匹配,如果這個表達出現超過,比如說3次。

有問題的日誌文件看起來像這樣:

[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] [SEVERE]  :: Exception was caught: Could not bind to port.. Exiting. 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] [SEVERE]  :: Exception was caught: Could not bind to port.. Exiting. 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] [SEVERE]  :: Exception was caught: Could not bind to port.. Exiting. 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] [SEVERE]  :: Exception was caught: Could not bind to port.. Exiting. 
[2013/03/12-16:07:06] Configurator :: FillSensor() 

而我要找的 「[嚴重]」 表達。

我想要一個匹配,如果該表達式出現超過3次。

我知道.*\[SEVERE\].*給我所有符合該表達式的行,但我只想匹配如果行數是3或更多。有沒有辦法用正則表達式來做到這一點?或者可以選擇與Monit一起做?

+1

分別讀取日誌文件的每一行,然後當您獲得3個匹配項時,將整個文件作爲匹配返回。 – Michael 2013-03-13 18:17:28

+1

另一種方法是使用'grep'來挑出線條,然後使用'wc'來計算匹配這些字詞的線條。 – nhahtdh 2013-03-13 18:34:58

+0

我認爲不幸的是,這些選項超出了Monit的範圍,我錯了嗎? – catteneo 2013-03-13 18:46:20

回答

2

如果你可以訪問你的日誌文件中能夠殼:

[ $(cat LOG.txt | grep "\[SEVERE\]" | wc -l) -ge 3 ] 

這個管道文件的內容grep其搜索包含行「[嚴重]」然後wc計數線和數量如果行數大於或等於3,則表達式返回0.

+0

是的,我猜這樣做的最佳選擇是Monit之外,有類似你的解決方案。謝謝 – catteneo 2013-03-14 14:48:45