适用于Linux的正则表达式 - 扫描Apache HTTPD访问日志以获取除200之外的所有响应代码

时间:2010-07-02 09:35:40

标签: regex grep

这是关于grep和正则表达式的问题。

如果我想查看响应为200码的所有请求,我可以这样做:

grep -e '^.* - - .* .* .* .* .* 200' access_log

非常轻松。

但是,如果我想检索响应不是200代码的所有请求呢? 我希望只用一条grep指令就可以做到这一点。这可能吗?

谢谢, 丹

2 个答案:

答案 0 :(得分:2)

您只需使用-v的{​​{1}}选项即可。这会反转匹配,因此它返回 not 匹配模式的所有行。

所以这样:

grep

答案 1 :(得分:1)

我会用这个:

^\S+\s+\S+\s+\S+\s+\[[^]]+\]\s+"(?:GET|POST|HEAD) [^ ?"]+\??[^ ?"]+? HTTP/[0-9.]+"\s+200

然后按照Daniel Egeberg的建议反转结果。

通过评论和捕获小组,RegexBuddy提供:

^((?#client IP or domain name)\S+)\s+((?#basic authentication)\S+\s+\S+)\s+\[((?#date and time)[^]]+)\]\s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)\??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+"\s+(?#status code)200