POSIX正则表达式不与[:digit:]字符类一起使用

时间:2017-01-18 14:29:32

标签: regex nginx posix

我在日志文件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

1 个答案:

答案 0 :(得分:1)

POSIX字符类应该在正则表达式字符类中使用,因此单个数字可以表示为:

[[:digit:]]

注意双括号。有关详情,请参阅this document

此外,你有一个裸.代表一个句点(我推测) - 应该使用反斜杠转义\.来代表一个文字句号。