【问题标题】:Unable to apply negative lookahead assertion to nagios plugin output on bash无法对 bash 上的 nagios 插件输出应用负前瞻断言
【发布时间】:2016-10-20 12:55:33
【问题描述】:

以下正则表达式有效(通过 regex101.com 尝试 PCRE/PHP 风格的正则表达式)以匹配给定日志文件中不包含代码 201 和 204 的行 -

正则表达式

/^(?!.*HTTP\/1.1\"\s*(201|204)).*$/gm

示例日志文件

127.0.0.1 - - [20/Oct/2016:11:35:08 +0000]  "GET //fam/shared_generate_LDA_compliant.php HTTP/1.1" 200 171 "-" "curl/7.40.0" - 0.002
127.0.0.1 - - [20/Oct/2016:11:35:34 +0000]  "GET /fam/update_daily_cap_in_memcache_contents.php HTTP/1.1" 200 64 "-" "curl/7.40.0" - 2.032
127.0.0.1 - - [20/Oct/2016:11:36:01 +0000]  "GET //fam/audience_pixel_cache_generator.php HTTP/1.1" 200 229001 "-" "curl/7.40.0" - 0.063
127.0.0.1 - - [20/Oct/2016:11:36:01 +0000]  "GET //fam/shared_generate_banner_campaign_assoc.php HTTP/1.1" 200 302 "-" "curl/7.40.0" - 0.406
127.0.0.1 - - [20/Oct/2016:11:36:02 +0000]  "GET /fam/update_daily_cap_in_memcache_contents.php HTTP/1.1" 200 64 "-" "curl/7.40.0" - 0.888
127.0.0.1 - - [20/Oct/2016:11:36:32 +0000]  "GET /fam/update_daily_cap_in_memcache_contents.php HTTP/1.1" 200 64 "-" "curl/7.40.0" - 0.965
127.0.0.1 - - [20/Oct/2016:11:37:01 +0000]  "GET //fam/audience_pixel_cache_generator.php HTTP/1.1" 200 229001 "-" "curl/7.40.0" - 0.021

我想在这个 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 插件命令一起使用,该命令会找出包含代码 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)"

悬赏

如何匹配不包含代码 201 和 204 的行而不使用 POSIX 风格的正则表达式中的前瞻?

【问题讨论】:

  • 在模式周围使用单引号,而不是双引号。
  • 喜欢这个? ` /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)).*$'` 仍然出现错误 - UNKNOWN: logwarn(1) error: invalid regular expression "^(?!.*HTTP\/1.1\"\s*(201|204)).*$": Invalid preceding regular expression
  • logwarn 使用 POSIX 扩展正则表达式,而不是 PCRE。 POSIX 不支持前瞻。
  • @melpomene 好的,您能否提供一些关于如何在不使用前瞻的情况下完成它的指示?

标签: regex linux bash posix nagios


【解决方案1】:

logwarn 文档提到了对否定检查表达式的支持。

请尝试在要排除的模式字符串之前添加感叹号 (!),而不是包含这些匹配项:

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

更新 - 上面的命令已根据下面的 cmets 进行了更正。

【讨论】:

  • 你是对的。 logwarn 支持它。我承认我没有看手册,事实上也没有努力去找出它。然而,一个小的修正 - 感叹号应该在引号内,并且引号需要是单引号 - /usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx /mnt/log/nginx/access_(date +'%Y%m%d')_(date +'%H')@ 987654329@
  • 另外,删除了-p,因为它代表non-matching,似乎否定了!的效果。
  • 谢谢-我无法对其进行测试,因此答案只是给出了可能需要的要点。现在已经按照上面的 cmets 进行了更正(以防其他人遇到它并且不阅读 cmets)。
  • 请看看你能不能帮忙stackoverflow.com/questions/40740449/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多