0

我是正则表达式的新手,请帮助我解决错误情况,我需要使用正则表达式来匹配日志文件中 AND 条件中的两条错误消息(出现在不同的行,但相同的段落中):

Msg1 - ERROR [com.company.util.ejb.TimedBean] () FAILED processing Loader

Msg2 - java.lang.RuntimeException: Message code:[SL] is unknown.

基本上,我需要的是 match (msg1)&&(msg2),在这种情况下, (ERROR...Loader) 将出现在第一行, (java...unknown) 将出现在下一行。消息将始终遵循此顺序。我在这里没有使用任何典型的语言进行编程,它们将被放入一个接受正则表达式的企业工具中。

如果可能的话,你能告诉我如何在 Or 条件下制作它(msg1)||(msg2)吗?

4

1 回答 1

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。)许多正则表达式工具,例如grep在许多系统上的plain,不能进行多行搜索。所以你可能不走运。

于 2012-06-04T20:15:04.373 回答