rsyslog出力からcronジョブ(systemd)から不要なメッセージをフィルタリングしようとしています。ただし、rsyslogは常に2番目のパラメータについて文句を言います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
\d
バックスラッシュを2倍にする必要があります。それ以外の場合、rsyslogはそれを解析できない文字列のエスケープシーケンスとして解釈しようとします。そうする必要があります\\d
。
しかし、\d
Posix EREではありません。たとえば、数字に言及できます[0-9]
。だから試してみてください
'^Started [Ss]ession [0-9]+ of user ntpmon\\.$'