【问题标题】:Parsing log file with sed in linux在 linux 中使用 sed 解析日志文件
【发布时间】:2017-06-18 06:28:44
【问题描述】:

我正在尝试使用 sed 解析日志文件,以使用模板从中提取 xml 消息。我想在新文件中获取所有 xml 消息。

我正在使用这个命令sed 's/<sending>\(.*\)<\/sending>/\1/' 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>

但我只得到没有&lt;sending&gt;&lt;/sending&gt; 元素的源文件,如下所示:

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>]

对不起我的英语,祝你有愉快的一天。谢谢你的帮助。

【问题讨论】:

  • 试试grep -oP '\&lt;sending\&gt;\K.*(?=\&lt;\/sending\&gt;)' filename

标签: xml bash unix sed cygwin


【解决方案1】:
sed 's/.*<sending>\(.*\)<\/sending>.*/\1/' input.out>output.xml

您忘记删除围绕该行的部分 (.*),sed 只获取您的模式的内容,并且您在 发送之前或之后不包含字符 em>集团

现在我建议

sed -e '/.*<sending>\(.*\)<\/sending>.*/!d' -e 's//\1/' input.out>output.xml

它删除没有发送块的行。不要忘记 sed 占用最长的可用部分,因此如果同一行(或更多)上有 2 个 bloc,则从第一次发送到最后一次 /sending

【讨论】:

  • NeronLeVelu,非常感谢,我解决了问题
猜你喜欢
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 2020-09-13
  • 2013-10-13
  • 2016-01-15
  • 2011-01-17
  • 1970-01-01
相关资源
最近更新 更多