系统日志模板中的正则表达式
Posted
技术标签:
【中文标题】系统日志模板中的正则表达式【英文标题】:Regex in syslog template 【发布时间】:2018-05-17 09:56:32 【问题描述】:我尝试在系统日志模板中使用正则表达式,但它仍然不起作用。我首先尝试做匹配一切以查看它是否有效,但它不起作用。我用一个在线工具测试了我的表达,它在那里工作。在我看来,日志消息应该是空的,因为表达式总是匹配 or?但是日志文件中总是有零。
template(name="testLogFormat" type="list")
property(name="syslogtag"
regex.type="ERE"
regex.submatch="0"
regex.expression=".*--end"
regex.nomatchmode="ZERO"
)
【问题讨论】:
它应该如何工作?什么是样本输入,什么是预期输出?您当前的正则表达式没有找到任何匹配项,regex.nomatchmode="ZERO"
设置输出0
s。如果您想在不匹配时使用空白,请使用 regex.nomatchmode="BLANK"
我有一个字符串 abc[123],我想在括号内获取术语,或者如果它为空,我想要 0。使用 .* 我匹配每个字符或?!
试试regex.expression="\[([0-9]+)]"
和regex.submatch="1"
谢谢,但我之前试过这个,当我用这个模板重新启动系统日志时出现错误。 “syslogd:运行失败,错误 -2207” syslog 版本 7.4.7。
您是否像%msg:R,ERE,1,ZERO:\[([0-9]+)]--end%
一样添加它? Rsyuslog.com 说:“如何在 rsyslog.conf 中使用这个表达式的一个非常简单的例子如下:$Template tpl,"%msg:R,ERE,1,ZERO:\[([0-9]+)]--end%\n"
*.* /path/to/file;tpl
”
【参考方案1】:
您的输入字符串看起来像abc[123]
。因此,您可以使用
regex.submatch="1"
regex.expression="\[([0-9]+)]"
请参阅regex demo。
这里,
\[
- 匹配 [
([0-9]+)
- 捕获到第 1 组(您使用 regex.submatch="1"
访问值)
]
- 结束]
。
【讨论】:
以上是关于系统日志模板中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章