2013-03-13 110 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

相关问题