在 linux 中使用 sed 解析日志文件
Parsing log file with sed in linux
我正在尝试使用 sed
来解析日志文件以使用模板从中提取 xml 消息。我想在新文件中获取所有 xml 消息。
我正在使用这个命令sed 's/<sending>\(.*\)<\/sending>//' input.out>output.xml
input.out 有以下内容:
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>]
抱歉我的英语不好,祝你有美好的一天。谢谢你的帮助。
sed 's/.*<sending>\(.*\)<\/sending>.*//' input.out>output.xml
您忘记 删除 行周围的部分 (.*
),sed 只获取您的模式的内容,您不在前后包含字符你的发送集团
现在我建议
sed -e '/.*<sending>\(.*\)<\/sending>.*/!d' -e 's///' input.out>output.xml
它删除没有发送方块的行。不要忘记 sed 占用最长的 partterne,所以如果在同一行(或更多)上有 2 个 bloc,它从第一次发送到最后一次 /sending
我正在尝试使用 sed
来解析日志文件以使用模板从中提取 xml 消息。我想在新文件中获取所有 xml 消息。
我正在使用这个命令sed 's/<sending>\(.*\)<\/sending>//' input.out>output.xml
input.out 有以下内容:
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>]
抱歉我的英语不好,祝你有美好的一天。谢谢你的帮助。
sed 's/.*<sending>\(.*\)<\/sending>.*//' input.out>output.xml
您忘记 删除 行周围的部分 (.*
),sed 只获取您的模式的内容,您不在前后包含字符你的发送集团
现在我建议
sed -e '/.*<sending>\(.*\)<\/sending>.*/!d' -e 's///' input.out>output.xml
它删除没有发送方块的行。不要忘记 sed 占用最长的 partterne,所以如果在同一行(或更多)上有 2 个 bloc,它从第一次发送到最后一次 /sending