我正在尝试使用sed
解析日志文件,以使用模板从中提取xml消息。我想在新文件中获取所有xml消息。
我正在使用此命令sed 's/<sending>\(.*\)<\/sending>/\1/' input.out>output.xml
input.out有以下сontent:
WARNING: Exchange[ExchangePattern: InOut, BodyType: byte[], Body: <?xml version="1.0" encoding="utf-8" standalone="yes"?><sending><query> <describe> <data>city</data> </describe> </query></sending>]
Sep 26, 2016 11:54:30 AM org.apache.camel.util.CamelLogger log
WARNING: Exchange[ExchangePattern: InOut, BodyType: byte[], Body: <?xml version="1.0" encoding="utf-8" standalone="yes"?><sending> <query> <key_info/> </query></sending>]
我希望得到这样的结果:
<query> <describe> <data>city</data> </describe> </query> <query> <key_info/> </query>
但我只收到没有<sending>
和</sending>
元素的源文件:
WARNING: Exchange[ExchangePattern: InOut, BodyType: byte[], Body: <?xml version="1.0" encoding="utf-8" standalone="yes"?><query> <describe> <data>city</data> </describe> </query>]
Sep 26, 2016 11:54:30 AM org.apache.camel.util.CamelLogger log
WARNING: Exchange[ExchangePattern: InOut, BodyType: byte[], Body: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <query> <key_info/> </query>]
抱歉我的英语,祝你有愉快的一天。谢谢你的帮助。
答案 0 :(得分:0)
sed 's/.*<sending>\(.*\)<\/sending>.*/\1/' input.out>output.xml
你忘了删除行的周围部分(.*
),sed只获取模式的内容,并且在发送之前或之后不包含char bloc
现在我建议
sed -e '/.*<sending>\(.*\)<\/sending>.*/!d' -e 's//\1/' input.out>output.xml
删除没有发送块的行。不要忘记,sed需要最长的partterne,所以如果同一行(或更多)上有2个集团,从第一次发送到最后/发送