繁体   English   中英

用于检索日志文件中前一行的正则表达式

[英]A regular expression to retrieve the previous line in a log file

我的日志文件包含以下内容:

 2009-03-12T12:44:27+0000 something was logged 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times 

我可以编写一个正则表达式来检索带有“重复的最后一条消息...”语句的行,但是,该行是没有意义的,而又不检索其前面的行。

话虽如此,是否有人知道一个正则表达式,只要检测到“最后一条消息重复...”语句,我就可以同时检索这两行?

编辑为2组匹配的正则表达式。 您可以在以下地方一下: RegexLib

较少,然后优化,但这:

([\r\n].*?)(?:=?\r|\n)(.*?(?:last message repeated).*)

应该可以从以下结果中获得结果:

2009-03-12T12:44:27+0000 something1 was logged
2009-03-12T12:44:27+0000 something2 was logged
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times
2009-03-12T12:44:27+0000 something3 was logged
2009-03-12T12:44:27+0000 something4 was logged
2009-03-12T12:44:27+0000 something5 was logged
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times

导致:

Matches
First Match, First Group: 2009-03-12T12:44:27+0000 something2 was logged
First Match, Second Group: 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times
Second Match, First Group: 2009-03-12T12:44:27+0000 something5 was logged 
Second Match, Second Group: 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times

我会这样做。 尝试搜索包括两个组的模式。 第一组是一行,其后是另一组,其中包含另一行带有“最后一条重复的消息”文本。 然后,第一组的内容就是您要查找的文本。

这样的事情(这是过于简化的正则表达式):

\n(.*)\n(.*)last message repeated

现在,第一个组值包含您感兴趣的行。

它必须是正则表达式吗? grep允许您在匹配之前和之后获取上下文( -B NUM-A NUM选项)

模式^。* $匹配整行。 翻译:行首,后跟任意数量的字符,后跟行尾。 因此,也许您可​​以搜索“任意行,后跟”(那里的模式)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM