我是正则表达式的新手,请在错误情况下帮助我,我需要使用正则表达式来匹配来自日志文件的AND条件中的两个错误消息(出现在不同的行,但是相同的段落):
Msg1 - ERROR [com.company.util.ejb.TimedBean] () FAILED processing Loader
Msg2 - java.lang.RuntimeException: Message code:[SL] is unknown.
基本上,我需要的是匹配(msg1)&&(msg2)
,在这种情况下,(ERROR ... Loader)将出现在第一行,(java ... unknown)将在下一行中出现。消息将始终遵循此顺序。我不是用这里的任何典型语言编程,它们将被放入一个接受regexp的企业工具中。
如果可能的话,您是否还会告诉我如何将其设置为(msg1)||(msg2)
?或
答案 0 :(得分:1)
理论上,匹配两个连续的行只是将两个正则表达式端到端地放在一起。因此,为了说明的目的,假设您有一个名为logfile.txt
的文件,其中包含您正在查找的消息。然后从Linux命令行可以执行以下操作:
pcregrep -M -o '^ERROR\N*Loader$\njava\N*unknown\.$\n' logfile.txt
它将打印您正在寻找的线对。将其分解为部分:
^ERROR
匹配行首的ERROR字样。\N*
匹配任何不是行终止符的字符数。Loader$
匹配一行末尾的Loader一词。\n
匹配换行符。 (在Windows上可能会有所不同。)java\N*unknown\.$\n
更像是一样。但是......这是一个大问题......处理正则表达式的工具必须能够进行多行匹配,并且必须打开该功能。 (这是-M
pcregrep
命令行选项启用的功能。)许多regexp工具(如许多系统上的普通grep
)都无法进行多行搜索。所以你可能运气不好。