Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 无法对bash上的nagios插件输出应用负前瞻断言_Regex_Linux_Bash_Posix_Nagios - Fatal编程技术网

Regex 无法对bash上的nagios插件输出应用负前瞻断言

Regex 无法对bash上的nagios插件输出应用负前瞻断言,regex,linux,bash,posix,nagios,Regex,Linux,Bash,Posix,Nagios,下面的regex工作(通过regex101.com尝试了regex的PCRE/PHP风格)以匹配给定日志文件中不包含代码201和204的行- Regex 示例日志文件 我想在这个nagios插件命令上应用相同的命令,但它不起作用- /usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx -p /mnt/log/nginx/access_`(date +'%Y%m%d')`_`(date +'%H')`.log "^(?!.*HT

下面的regex工作(通过regex101.com尝试了regex的PCRE/PHP风格)以匹配给定日志文件中不包含代码201和204的行-

Regex

示例日志文件

我想在这个nagios插件命令上应用相同的命令,但它不起作用-

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx -p /mnt/log/nginx/access_`(date +'%Y%m%d')`_`(date +'%H')`.log "^(?!.*HTTP\/1.1\"\s*(201|204)).*$"
抛出错误-

bash: !.*HTTP\/1.1\"\s*: event not found
下面的正则表达式与nagios plugin命令一起工作,它查找包含代码200或201的行-

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx -p /mnt/log/nginx/access_`(date +'%Y%m%d')`_`(date +'%H')`.log ".*HTTP/1.1\"\s*(200|201)"
开盘布尼

如何在不使用POSIX风格的正则表达式中的lookaheads的情况下匹配不包含代码201和204的行?

文档提到了对负数检查表达式的支持

请尝试在模式字符串之前预先挂起感叹号(
),以排除而不是包括以下匹配项:

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx /mnt/log/nginx/access_(date +'%Y%m%d')_(date +'%H').log '!.*HTTP/1.1\"\s*(205|201)'
更新-根据下面的注释更正了上面的命令。文档中提到了对否定检查表达式的支持

请尝试在模式字符串之前预先挂起感叹号(
),以排除而不是包括以下匹配项:

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx /mnt/log/nginx/access_(date +'%Y%m%d')_(date +'%H').log '!.*HTTP/1.1\"\s*(205|201)'

更新-根据下面的注释更正了上面的命令。

在模式周围使用单引号,而不是双引号。像这样?`/usr/local/nagios/libexec/check_logwarn-d/tmp/logwarn_nginx-p/mnt/log/nginx/access_
(日期+'%Y%m%d')
(日期+'%H').log'^(?。*HTTP\/1.1\'\s*(201 | 204)).*$`仍在获取错误-
UNKNOWN:logwarn(1)错误:无效的正则表达式“^(?。*HTTP\/1.1\”\s*(201 | 204)).$”:前面的正则表达式无效
logwarn使用POSIX扩展正则表达式,而不是PCRE。POSIX不支持向前看。@melpomene好的,你能提供一些关于如何在不使用lookaheads的情况下完成它的指针吗?在模式周围使用单引号,而不是双引号。像这样/usr/local/nagios/libexec/check_logwarn-d/tmp/logwarn_nginx-p/mnt/log/nginx/access_
(日期+'%Y%m%d')
(日期+'%H').log'^(?。*HTTP\/1.1\'\s*(201 | 204)).*$`仍在获取错误-
UNKNOWN:logwarn(1)错误:无效的正则表达式“^(?。*HTTP\/1.1\”\s*(201 | 204)).$”:前面的正则表达式无效
logwarn使用POSIX扩展正则表达式,而不是PCRE。POSIX不支持向前看。@melpomene好的,你能提供一些关于如何在不使用lookaheads的情况下完成它的指针吗?你是对的。logwarn对此表示支持。我承认我没有看手册,事实上也没有努力去找出它。然而,一个小的修正-感叹号应该在引号内,引号需要是单引号-
/usr/local/nagios/libexec/check\u logwarn-d/tmp/logwarn\u nginx/mnt/log/nginx/access
(日期+'%Y%m%d')
(日期+'%H')
*HTTP/1.1 \“\s*(205 | 201)
也删除了
-p
,因为它代表
不匹配的
,似乎否定了
的效果。谢谢-我无法测试它,所以答案只是给出了所需内容的可疑要点。现在根据您的上述评论进行了更正(以防其他人看到它而不阅读评论)。请看你是否能帮上忙。请看你是否能回答你是对的。logwarn支持它。我承认我没有看手册,事实上也没有努力去找出它。不过,一个小小的更正-感叹号应该在引号内,引号必须是单引号-
/usr/local/nagios/libexec/check_logwarn-d/tmp/logwarn_nginx/mnt/log/nginx/access_uu
(日期+'%Y%m%d')
(日期+'%H')
.log'!.*HTTP/1.1\'\s*(205 | 201)“
此外,删除了
-p
,因为它代表
不匹配的
,似乎否定了
的效果!
。谢谢-我无法测试它,所以答案只是给出了所需内容的可疑要点。现在已根据您的上述评论更正(以防其他人看到它并且没有阅读评论)。请看你是否可以帮助解决这个问题。请看你是否可以回答
/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx /mnt/log/nginx/access_(date +'%Y%m%d')_(date +'%H').log '!.*HTTP/1.1\"\s*(205|201)'