![正则表达式不适用于 rsyslog conf 中的 [][]](https://linux22.com/image/212013/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%20rsyslog%20conf%20%E4%B8%AD%E7%9A%84%20%5B%5D%5B%5D.png)
我想将以下消息重定向到日志文件中:
"[example]:[foo][bar]: "
"[example]:[foo][hello]: "
"[example]:[foo][world]: "
"[example]:[foo][other]: "
"[example]:[foo][text]: "
中的内容3rd field
是仅包含小写[az]的动态文本:
"[example]:[foo][.*]: "
contains
如果我使用“ ”关键字创建 rsyslog conf 文件,它就可以工作:
:msg, contains, "[example]:[foo]" -/var/log/example.log
但以下正则表达式根本不起作用,没有记录任何消息:
:msg, regex, "\[example\]\:\[foo\]\[.*\]\:\ " -/var/log/example.log
我的正则表达式出了什么问题?
如何编写正确的正则表达式来匹配上述消息并包含所有必填字段?
答案1
问题是过滤器命令的处理有两个阶段,每个阶段都解释反斜杠转义。结果是,如果您想匹配文字,[
那么您的正则表达式模式是\[
,但您需要转义反斜杠,因为您将模式作为字符串提供,因此必须使用\\[
。
您不需要转义:
, ]
, 也不需要空格,所以您可以使用
:msg, regex, "\\[example]:\\[foo]\\[.*]: " -/var/log/example.log