【发布时间】:2017-10-07 04:18:38
【问题描述】:
我是 sed 的新手,在用一些 XML 代码查找和替换 XML 标记之间的多行 XML 代码时遇到了麻烦。这是 XML 代码的示例
<List>
<User>
<Id>1234</Id>
<Info>
<Id>11</Id>
</Info>
</User>
</List>
我想把List标签之间的XML代码替换成..
<List>
<Replace>
<Id> 223 <Id>
</Replace>
</List>
我用过
sed "s/\(<Id>\).*\(<\/Id\)/\19999\2/" input.xml > output.xml 但它适用于单行但不适用于多行。列表标签之间的内容可能会改变,也可以是内联的。所以不能回复特定的模式,但需要只依赖标签。任何帮助或指针将不胜感激?
【问题讨论】:
-
不要使用正则表达式来解析 xml。看到这个帖子stackoverflow.com/questions/9200462/…
-
在 bash/awk 中处理 XML 不是最好的(即最健壮/最安全)的方式,但可能会为个人/调试目的提供快速而肮脏的解决方案。因此,您可以考虑以下 Q/A:SO: Get a block from an XML file using data from a source file、SO: Shell scripting - split xml into multiple files。