0

Jetty アクセス ログからすべての GET /admin/hb レコードを抽出するのに適した egrep があります。

egrep '^.*? ".+? /admin/hb .*?".*?$' /m1/logs/ap*access*2013_03_19.log

「GET /admin/hb」ではないすべての行を取得したいと思います。egrep -v で十分に簡単です...

egrep -v '^.*? ".+? /admin/hb .*?".*?$' /m1/logs/ap*access*2013_03_19.log

...しかし、最終的にはこの式を Groovy スクリプトに入れる予定であり、「/admin/hb」部分を無効にする方法を知りたいと考えています。否定的なルックアラウンドでの私の弱い試みは失敗しました。どの行にも一致しません。

egrep '^.*? ".+? ^(?!/admin/hb) .*?".*?$' /m1/logs/ap*access*2013_03_19.log

/admin/hb に一致しないすべてのアクセス ログ行を egrep で生成するにはどうすればよいですか?

テスト データ セットは次のとおりです。ソリューションは最初の行をスキップすることを期待していますが、次の 2 行は一致します。

127.0.0.1 -  -  [20/Mar/2013:16:37:08 +0000] "GET /admin/hb HTTP/1.1" 200 105  4
10.23.68.60 -  -  [20/Mar/2013:16:37:08 +0000] "GET /$PIT$/AUS/admin/hb HTTP/1.1" 200 0  4
10.23.68.64 -  -  [20/Mar/2013:16:36:47 +0000] "GET /handsets/dmhc HTTP/1.1" 200 0  1
4

1 に答える 1

2

これは、お使いのバージョンの grep で動作しますか?

grep -P '^.*? "\S+?(?! /admin/hb) .*?".*?$' groovy
10.23.68.60 -  -  [20/Mar/2013:16:37:08 +0000] "GET /$PIT$/AUS/admin/hb HTTP/1.1" 200 0  4
10.23.68.64 -  -  [20/Mar/2013:16:36:47 +0000] "GET /handsets/dmhc HTTP/1.1" 200 0  1
于 2013-03-20T19:20:07.477 に答える