0

我正在处理一个我不知道是否可以通过这种方式解决的问题,希望你能帮助我,让我们看看:

我正在使用 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做它的替代方法?

4

1 回答 1

2

如果您可以在功能强大的 shell 中访问您的日志文件:

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

grep这将搜索包含“[SEVERE]”的行的文件内容通过管道传输,然后wc计算行数,如果行数大于或等于 3,则表达式返回 0。

于 2013-03-13T19:36:44.853 回答