rsyslog 属性替换器正则表达式需要双重转义才能使用特殊字符?

rsyslog 属性替换器正则表达式需要双重转义才能使用特殊字符?

考虑以下日志行:

2019-04-20 21:17:57,505341,+0000 [Web,279,10.0.0.100] c4da4857-63b1-11a9-a00a-b0521699037b TCP RX ...

2019-04-20 21:17:57,505341,+0000我想在使用 rsyslog 写入此日志行之前删除开头的时间戳。

我利用模板中的属性替换器,使用正则表达式来匹配时间戳后的所有内容,如下所示:

template (name="mylog" type="string" string="%timereported% %syslogtag% %pri-text% %msg:R,ERE,1,BLANK:(\\[.*)--end%\n")

\\注意括号前的双精度[

\如果我在括号前只使用一个, rsyslog 会抛出一个错误,但使用两个括号就可以正常工作\\

我对正则表达式不是很熟悉,但我的理解是,像括号这样的特殊字符[需要转义单数\,以便它能够匹配日志行中的文字括号。为什么单数\在 rsyslog 中不起作用,而双数却\\起作用?

我在 Debian 上使用 rsyslog v8.40.0。

我错过了什么?

答案1

你对正则表达式语法是正确的,但你必须记住你将其作为字符串常量提供,因此你还必须尊重规则其中规定特殊字符(包括反斜杠)用反斜杠转义。链接页面有一个指向在线工具为你逃脱。

相关内容