![用于监控 apache 日志中的 HTTP 错误的正则表达式](https://linux22.com/image/623376/%E7%94%A8%E4%BA%8E%E7%9B%91%E6%8E%A7%20apache%20%E6%97%A5%E5%BF%97%E4%B8%AD%E7%9A%84%20HTTP%20%E9%94%99%E8%AF%AF%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
我正在寻找一个正则表达式,可以用来扫描标准 apache 日志文件中的 HTTP 错误。
我感兴趣的是匹配所有不具有 HTTP 200 或 HTTP 204 返回状态。
我可以匹配做包含 HTTP 204 或 HTTP 200 返回代码
grep 'HTTP[^"]*" 204 \| HTTP[^"]*" 200'
但我希望得到逆运算。我也确信上面的表达式可以优化。
我需要将这样的正则表达式提供给外部程序,因此使用grep -v
它来反转不是一个选择。
答案1
普通正则表达式不包含除单个字符之外的任何内容的方法,因此我认为您必须提供您想要的完整代码列表:
HTTP[^"]*" (1|20[12356]|3|4|5)
Perl 兼容的 RE 确实允许你否定文本字符串,因此如果你使用它们,你可以使用
HTTP[^"]*" (?!(200|204))
答案2
开关-v
会给出所有不匹配的行,因此:
egrep -v 'HTTP[^"]*" (200|204)'