【问题标题】:Regular expression to match if X strings containing a word?如果 X 字符串包含一个单词,则匹配正则表达式?
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我想最好的选择是在 Monit 之外,使用类似您的解决方案。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多