【发布时间】:2017-01-18 14:29:31
【问题描述】:
我在日志文件access_20170118_14.log 中有以下日志行 -
127.0.0.1 - - [18/Jan/2017:14:22:16 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.1" 200 168 "-" "curl/7.40.0" - 0.008
127.0.0.1 - - [18/Jan/2017:14:22:24 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.0" 200 168 "-" "curl/7.40.0" - 0.008
以下是一个 nginx logwarn 命令,它从这个日志文件中打印出那些 HTTP 访问代码不同于 200 和 204 的日志行。
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx_access /mnt/log/nginx/access_20170118_14.log '!.*HTTP/1.(1|0)\"\s*(200|204)'
上述命令中的正则表达式按预期工作。
但是,我想去掉 (1|0),它是为了匹配 HTTP 版本 1.0 和 1.1 而添加的,并将其替换为任何数字,以便它适用于任何版本的 HTTP。
以下带有 [:digit:] 字符类的命令与 HTTP 版本 1.1 和 1.0 以及访问代码 200 的行匹配 -
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx_access /mnt/log/nginx/access_20170118_14.log '!.*HTTP/1.[:digit:]\"\s*(200|204)'
输出(不是我想要的) -
Log errors: 127.0.0.1 - - [18/Jan/2017:14:22:16 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.1" 200 168 "-" "curl/7.40.0" - 0.008
127.0.0.1 - - [18/Jan/2017:14:22:24 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.0" 200 168 "-" "curl/7.40.0" - 0.008
【问题讨论】:
-
也许你可以尝试 \d 代替(到目前为止你已经在使用 \s)?
-
正则表达式中的前导
!,那是什么?