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如何合并多行正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Notepad++正则表达式合并多行代码为1行

正则表达式如何匹配多行的所有任意字符

如何在 JavaScript 中将长正则表达式拆分为多行?

如何在正则表达式中匹配多行中的任何字符?

如何在多行上使用 JavaScript 正则表达式?

正则表达式 python 多行