使用sed替换XML多行标记中的文本

时间:2017-05-09 02:06:46

标签: xml sed

我是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但它适用于单行,但不适用于多行。 List标签之间的内容可能会更改,也可能是内联的。因此无法回复特定模式,但需要依赖于标签。任何帮助或指示将不胜感激?

1 个答案:

答案 0 :(得分:0)

如果你真的想忽略林奇的建议,那就可以做到,但你需要重新美化它:

sed -e ':a;N;$!ba' -e 's#<List.*</List>#<List>\n<Replace>\n<Id> 223 <Id>\n</Replace>\n</List>#' input.xml > output.xml

它可能需要sed的GNU版本。