POSIX 正则表达式不适用于 [:digit:] 字符 class

POSIX regex not working with [:digit:] character class

我在日志文件中有以下日志行 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 命令,它从该日志文件中打印出那些具有不同于 200 和 204 的 HTTP 访问代码的日志行。

/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)' 

上述命令中的正则表达式按预期工作。

不过,我想去掉为匹配 HTTP 1.0 和 1.1 版本而添加的 (1|0),并将其替换为任何数字,以便它适用于任何版本的 HTTP。

以下命令带有 [:digit:] 字符 class,但与 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

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

[[:digit:]]

注意双括号。有关更多信息,请参阅 this document

此外,您有一个裸露的 . 表示一个句点(我想)- 应该用反斜杠转义 \. 来表示一个字面句点。