![rsyslog 的 re_match() 的正确语法是什么?](https://linux22.com/image/141926/rsyslog%20%E7%9A%84%20re_match()%20%E7%9A%84%E6%AD%A3%E7%A1%AE%E8%AF%AD%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在尝试从 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\\.$'