我在日志文件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
答案 0 :(得分:1)
POSIX字符类应该在正则表达式字符类中使用,因此单个数字可以表示为:
[[:digit:]]
注意双括号。有关详情,请参阅this document。
此外,你有一个裸.
代表一个句点(我推测) - 应该使用反斜杠转义\.
来代表一个文字句号。