0

我有一个 perl 脚本,它解析日志并搜索错误、致命等特定模式并确定通过和失败状态。来到我的问题,我需要搜索像“错误(E302 / FEP0512SRA)”这样的uniq模式,如果这种模式在日志文件的任何行中都是presnet,它应该将error_cnt增加1。

我尝试了“\”和下面的方法,但在这两种情况下我都无法捕捉到上面提到的模式。

my $str = "Error (E302/FEP0512SRA)";
if($line =~ /$str/) {
      $error_cnt++;      
}

请让我知道我还能做什么,以便我可以在我的日志中捕获这个字符串。

4

2 回答 2

3

您的字符串包含正则表达式元字符(括号)。您应该手动逃脱它们,或使用quotemeta

my $str = quotemeta "Error (E302/FEP0512SRA)";
于 2013-09-12T11:27:05.533 回答
2

正则表达式包含许多运算符,即所谓的元字符。Parens()就是这样的元字符,必须转义。Perl 提供了这个quotemeta功能。在正则表达式中,我们可以使用等效的\Q...\E环境,它会为我们解决这个问题。然后:

$error_cnt++ if $line =~ /\Q$str\E/;
于 2013-09-12T11:27:07.177 回答