rsyslogのre_match()の正しい構文は何ですか?

rsyslogのre_match()の正しい構文は何ですか?

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

しかし、\dPosix EREではありません。たとえば、数字に言及できます[0-9]。だから試してみてください

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

おすすめ記事