我有一个egrep,可以很好地从Jetty访问日志中提取所有GET / admin / hb记录
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
如何让egrep生成与/ admin / hb不匹配的所有访问日志行?
测试数据集如下。我希望解决方案跳过第一行,但匹配接下来的两行:
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
答案 0 :(得分: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