正则表达式是否匹配包含单词的X字符串?
问题描述:
我正在处理一个问题,我不知道是否有可能解决这个问题,希望你能帮助我,让我们看看:正则表达式是否匹配包含单词的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一起做?
答
如果你可以访问你的日志文件中能够壳:
[ $(cat LOG.txt | grep "\[SEVERE\]" | wc -l) -ge 3 ]
这个管道文件的内容grep
其搜索包含行“[严重]”然后wc
计数线和数量如果行数大于或等于3,则表达式返回0.
+0
是的,我猜这样做的最佳选择是Monit之外,有类似你的解决方案。谢谢 – catteneo 2013-03-14 14:48:45
分别读取日志文件的每一行,然后当您获得3个匹配项时,将整个文件作为匹配返回。 – Michael 2013-03-13 18:17:28
另一种方法是使用'grep'来挑出线条,然后使用'wc'来计算匹配这些字词的线条。 – nhahtdh 2013-03-13 18:34:58
我认为不幸的是,这些选项超出了Monit的范围,我错了吗? – catteneo 2013-03-13 18:46:20