【发布时间】:2013-03-13 18:14:15
【问题描述】:
我正在处理一个我不知道是否可以通过这种方式解决的问题,希望您能帮助我,让我们看看:
我正在使用 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()
我正在寻找“[SEVERE]”表达式。
如果该表达式出现超过 3 次,我想要一个匹配项。
我知道.*\[SEVERE\].* 为我提供了与该表达式匹配的所有行,但我只想匹配该行数为 3 或更多的行。有没有办法用正则表达式来做到这一点?或者也许可以用 Monit 来做这件事?
【问题讨论】:
-
单独读取日志文件的每一行,然后当您获得 3 个匹配项时,将整个文件作为匹配项返回。
-
另一种方法是用
grep挑出行,然后用wc统计与单词匹配的行。 -
我认为不幸的是这些选项超出了 Monit 的范围,我错了吗?
-
grep SEVERE somelogfile.txt | tail -n +3。如果没有输出,则包含SEVERE的行数不超过 3 行。如果有输出,还有更多,但前三个会丢失......
标签: regex unix regex-negation monit