unix 命令在日志中搜索 5XX 状态 HTTP 请求的计数

unix command to search count of 5XX status HTTP requests in the log

我需要编写一个 unix 命令来搜索日志中 5XX 状态 HTTP 请求的计数。日志格式如下例:

192.168.0.101 - - [12/Dec/2019:23:15:56 +0900] "GET /index.html HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0" 

有什么建议吗?

最小的解决方案是

$ grep "5\d{2}" somefile.log | wc -l

grep 会将输出过滤为仅包含字符串 5XX 的行,其中 X 是任何数字字符。然后将此输出通过管道传输到 wc -l,它计算生成的行数。

但是,字符串 5XX 可能会出现在日志文件的其他位置。考虑到这一点,您不妨考虑在 grep 中使用更详细的模式,例如

$ grep "HTTP/1.1\"\ 5\d{2}" somefile.log | wc -l

这确保您只匹配 HTTP 错误代码,而不匹配,例如未来的 Gecko 版本。