Perl日志文件模式匹配循环内循环

时间:2018-07-19 12:33:14

标签: perl

我有一个(重复)这样的日志文件:

<header> <timestamp>2018-05-18T13:22:35.842</timestamp> <requestedService>requestSchufameldungAbgeben</requestedService> ... <errorCode>/IWBEP/CX_MGW_BUSI_EXCEPTION</errorCode>

我想要做的是下去,直到找到错误字符串“ CX_MGW_BUSI_EXCEPTION”,然后提取上面的错误字符串和时间戳。关于如何执行此操作的任何想法? 该脚本应重复遍历整个文件。

我已经尝试过类似的方法,但是我不知道如何继续进行下去:

while(my $line=<F>) {
    if ( $line=~/^\s*<timestamp>/) {
                    while(my $nextline =<F>) {
                            if ($nextline =~ /BUSI_EXCEPTION/) {
                            print;
                            flag = 1;
                            }
                    }
    }
}

1 个答案:

答案 0 :(得分:1)

只需保存任何时间戳并在需要时打印即可:

while (my $line = <F>)
{
    $timestamp = $1 if $line =~ /^\s*<timestamp>(.*)</;
    print $timestamp, "\t", $1, "\n" if $line =~ />(.*BUSI_EXCEPTION.*)</
}