Perl正则表达式:基于第一个模式的第二个模式匹配

时间:2013-05-10 05:44:13

标签: regex perl

我需要匹配并从日志中提取带有pattern1的行,该日志应该位于另一个pattern2匹配的行之后: 例如,日志包含如下数据:

00:00:01 Computing CDA.
00:01:10 Trying to open errorLog1.
00:01:12 writing errorLog1.
00:01:13 Trying to open outLog1.
00:01:14 writing outLog1.
00:01:15 Processing Complete!
00:01:16 Validating documents.
00:02:14 Trying to open errorLog2.
00:02:12 writing errorLog2.
00:02:13 Trying to open outLog2.
00:02:14 writing outLog2.
00:02:15 Processing Complete!

我需要计算文档验证所用的时间(第一列)。所以我想用“验证文档”字符串和“处理完成”字符串检索该行以提取时间并获得差异。 这可能很简单,但我无法找到解决方案。

2 个答案:

答案 0 :(得分:1)

这应该有效:

if ($subject =~ m/(\d{2}:\d{2}:\d{2}) Validating documents\..*?(\d{2}:\d{2}:\d{2}) Processing Complete!/s) {
    $start = $1;
    $end = $2;
    # Calculating the time difference is left as an exercise :)
}

答案 1 :(得分:0)

perl -lane '$a=$F[0] if(/Validating documents/);if(/Processing Complete/){print $F[0]-$a}' your_file

我在代码中只提到了$F[0]-$a,但它不是计算时间的方式。但是这是你工作和计算时差的部分。$F[0]保留了时间。在行

中遇到处理完成