我正在尝试从 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.
我该如何修复它(过滤器,而不是文档)?
您需要将反斜杠加倍,否则 rsyslog 会尝试将其解释
\d
为字符串中的转义序列,这是不可解析的。所以应该是\\d
。但
\d
不是 Posix ERE。[0-9]
例如,您可能是指一个数字。所以试试