rsyslog 的 re_match() 的正确语法是什么?

rsyslog 的 re_match() 的正确语法是什么?

我正在尝试从 rsyslog 输出中过滤来自 cron 作业 (systemd) 的不需要的消息。然而 rsyslog 总是抱怨 的第二个参数re_match()。我的过滤规则是:

if $programname == "systemd" and re_match($msg, '^Started [Ss]ession \d+ of user ntpmon\.$') then stop

我开始将正则表达式放在双引号中,rsyslog 抱怨道。然后我将正则表达式放在单引号中,rsyslog 仍然抱怨。

该文档有点含糊:

re_match(expr, re)

    returns 1, if expr matches re, 0 otherwise. Uses POSIX ERE.

我该如何修复它(过滤器,而不是文档)?

答案1

您需要加倍反斜杠,否则 rsyslog 会尝试将其解释\d为字符串中的转义序列,而这是不可解析的。应该如此\\d

\d不是 Posix ERE。例如,您可能指的[0-9]是数字。所以尝试一下

'^Started [Ss]ession [0-9]+ of user ntpmon\\.$'

相关内容