您好我有一个大日志文件,我正在尝试将xml数据传递给它。
我有一个重要的大日志文件:
2016/01/01 bladh bqskjdqskldjqsdlqskdjqlskdj dazihzmkldjkdjqslkjd
2016/01/01: qsdhqsdlkqsmdjqsldjqslkdjqlskdjqslkdjqslkdjqskdjqsd
2016/01/01: qsjdqmlskdmlqskdmcxxxx [qskjd][qsdjqslkdj] Payload :[<LOG><a>a</a>
<b>b</b>
<c>c</c>
<id>XXXXX</id>
<d>d</d>
</LOG>]]
2016/01/01 bladh bqskjdqskldjqsdlqskdjqlskdj dazihzmkldjkdjqslkjd
2016/01/01: qsdhqsdlkqsmdjqsldjqslkdjqlskdjqslkdjqslkdjqskdjqsd
2016/01/01: qsjdqmlskdmlqskdmcxxxx [qskjd][qsdjqslkdj] Payload :[<LOG> <a>a</a>
<b>b</b>
<c>c</c>
<id>YYYYY</id>
<d>d</d>
</LOG>]]
qskdmqlskdqlsdqlskdqlsdk
qsdlkqsdlkqsdmlkqsdlk
目前我正在使用
sed -n '/<START/{:start /\/END/!{N;b start};/XXXXX/p}' logFile
我正在接受这个
2016/01/01: qsjdqmlskdmlqskdmcxxxx [qskjd][qsdjqslkdj] Payload :[<LOG><a>a</a>
<b>b</b>
<c>c</c>
<id>XXXXX</id>
<d>d</d>
</LOG>]]
我想检索整个XML并获取:
<LOG>
<a>a</a>
<b>b</b>
<c>c</c>
<id>XXXX</id>
<d>d</d>
</LOG>
提前致谢
答案 0 :(得分:1)
TXR中的解决方案:
@(repeat)
@ (skip)Payload :[<@tag>@preamble
@ (collect)
@middle
@ (last)
</@tag>]]
@ (end)
@ (output)
<@tag>
@(trim-str preamble)
@ (repeat)
@middle
@ (end)
</@tag>
@ (end)
@(end)
执行命令
$ txr extract.txr data
<LOG>
<a>a</a>
<b>b</b>
<c>c</c>
<id>XXXXX</id>
<d>d</d>
</LOG>
<LOG>
<a>a</a>
<b>b</b>
<c>c</c>
<id>YYYYY</id>
<d>d</d>
</LOG>
答案 1 :(得分:0)
试试这个:
sed -n '/<LOG/{:a;/<\/LOG/!{N;ba};s/.*\(<LOG>\)\(.*XXXXX.*<\/LOG>\).*/\1\n\2/p}' logFile
它应该完成这项工作,但请记住,sed不是解析xml的正确工具。如果您必须解析有效的xml文件,则应考虑使用xmlstarlet或xmllint。
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -nr '/<LOG>/,/<\/LOG>/{s/.*(<LOG>)\s*/\1\n/;s/(<\/LOG>).*/\1/;p}' file
除非明确要求,否则使用seds grep-like选项禁止打印,并使用范围功能/.../,/.../
,顶部和尾部生成的字符串。