这是关于grep和正则表达式的问题。
如果我想查看响应为200码的所有请求,我可以这样做:
grep -e '^.* - - .* .* .* .* .* 200' access_log
非常轻松。
但是,如果我想检索响应不是200代码的所有请求呢? 我希望只用一条grep指令就可以做到这一点。这可能吗?
谢谢, 丹
答案 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