Regex 无法对bash上的nagios插件输出应用负前瞻断言
下面的regex工作(通过regex101.com尝试了regex的PCRE/PHP风格)以匹配给定日志文件中不包含代码201和204的行- Regex 示例日志文件 我想在这个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
/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)'