用于监控 apache 日志中的 HTTP 错误的正则表达式

用于监控 apache 日志中的 HTTP 错误的正则表达式

我正在寻找一个正则表达式,可以用来扫描标准 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)'

相关内容