使用Perl从日志中打印x和y之间的行

时间:2013-09-06 19:30:21

标签: perl unix xml-parsing

我有日志文件,其中包含一些xml消息,如...

<fixsim xyz='tststtsts'>
  <name test="test1">
    <time t=234>
    </time>
  </name>
</fixsim>


here some normal log text
whoiwoei
blsdbndsnb

<fixsim xyz='tssts'
  <name test="test2"
<time t=234>
    </time>
  </name>
</fixsim>

依旧......

从上面的日志文件中我想要获取某些条件的xml消息(from <Fixsim> to </fixsim>)。例如

我希望xml消息有test = test2。所以输出我应该

<fixsim xyz='tssts'
  <name test="test2"
<time t=234>
    </time>
  </name>
</fixsim>

1 个答案:

答案 0 :(得分:4)

以下将获取XML文档:

process($_) for $log =~ m{<fixsim.*?</fixsim>}sg;

等等

my $xml;
while (<$log_fh>) {
   if ( my $count = m{<fixsim} .. m{</fixsim>} ) {
      $xml .= $_;

      if ($count =~ /E0\z/) {
          process($xml);
          $xml = undef;
      }
   }

   process($xml) if defined($xml);
}

获得XML后,您可以使用自己喜欢的XML解析器提取所需的字段。