NXLOG如何合并多行正则表达式
Posted
技术标签:
【中文标题】NXLOG如何合并多行正则表达式【英文标题】:NXLOG how to merge multilines regex 【发布时间】:2018-11-22 14:05:37 【问题描述】:我有这样的日志:
14:40:33.476 [WebContainer : 149] sometihng sometihng
14:40:33.476 [WebContainer : 149] sometihng sometihng
14:40:33.476 [WebContainer : 149] sometihng sometihng
14:40:33.476 [WebContainer : 245] csometihng sometihng
14:40:33.476 [WebContainer : 245] sometihng sometihng
14:40:33.476 [WebContainer : 245] sometihng sometihng
我使用 nxlog 将其发送到 kafka,我想要的是将所有带有“WebContainer:149”的行合并为一个,并在此更改时合并下一行等等。
【问题讨论】:
【参考方案1】:您可以使用以下正则表达式来捕获具有特定值的所有行:
/(.*\[WebContainer : (\d+)\]\s*(.*))+\s+.*\[WebContainer : \2\]\s(.*)+\s+.*\[WebContainer : \2\]\s(.*)+/g
正则表达式匹配任意数量的任意字符,直到 '[WebContainer :
',然后匹配任意数字和右方括号,然后匹配空格。
然后重新开始(换行),只是这里它使用捕获组 2 来指定编号。这在第三行重复。
然后将匹配项替换为:
$1$3$4
现在您将得到每个数字一行,将每一行中的 'sometihng
' 组合在一起。
【讨论】:
这适用于这种特殊情况,但如果我们不知道 webcontainer: 123 将有多少行(但数量有限)。忘了这件事:) 您不能添加未知数量的行。然后就变成了多个匹配,不能用反向引用代替。 如果要添加一行,可以在正则表达式中添加'\s+.*[WebContainer : \2]\s(.*)+',在替换中添加'$5'。以上是关于NXLOG如何合并多行正则表达式的主要内容,如果未能解决你的问题,请参考以下文章