我有一个如下所示的日志文件:
2010-05-12 12:23:45 Some sort of log entry
2010-05-12 01:45:12 Request XML: <RootTag>
<Element>Value</Element>
<Element>Another Value</Element>
</RootTag>
2010-05-12 01:45:32 Response XML: <ResponseRoot>
<Element>Value</Element>
</ResponseRoot>
2010-05-12 01:45:49 Another log entry
我想做的是提取请求和响应 XML(并最终将它们转储到它们自己的单个文件中)。我有一个使用 egrep 的类似解析器,但 XML 全部在一行上,而不是像上面那样多行。
日志文件也有些大,一个日志达到 500-600 兆。较小的日志我会通过 PHP 脚本读取并使用正则表达式匹配,但如此大的文件所需的内存量很可能会终止脚本。
是否有一种简单的方法使用 Linux 机器(在本例中为 CentOS)上的内置工具来提取多行,或者我是否必须硬着头皮使用 Perl 或 PHP 读取整个文件以提取出来?
最佳答案
# Example usage:
# perl script.pl data.xml RootTag > RootTag.xml
use strict;
use warnings;
my $tag = pop;
while (<>){
if ( s/.*(<$tag>)/$1/ .. s/(<(\/)$tag>).*/$1/ ){
print;
last if $2;
}
}
有关 flip-flop operator 的详细信息,请参阅文档.
关于php - 如何从 Linux 上的日志文件中提取 XML block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2831409/