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

対応するシェルでログ ファイルにアクセスできる場合:

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

これにより、ファイルの内容がパイプさgrepれ、"[SEVERE]" を含む行が検索され、行wc数がカウントされ、行数が 3 以上の場合、式は 0 を返します。

于 2013-03-13T19:36:44.853 に答える