使用 sed 命令在 xml 文件中查找和替换字符不起作用

使用 sed 命令在 xml 文件中查找和替换字符不起作用

我有一个名为 myfile.xml 的 xml 文件

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&Welcome</c>
   </b>
   <d>Hello & How are you?</d>
</a>

我想要这种转变

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello &amp; How are you?</d>
</a>

我使用 sed 命令将所有出现的 & 更改为 &

sed -i 's:&:&amp;:' myfile.xml

但我收到“未定义标签‘yfile.xml’”错误。我无法继续。该怎么办?

答案1

如果你没有GNU sedsed需要一个参数-i

sed -i.bak 's:&:&amp;:' myfile.xml

并且备份文件是一个好主意或者……

…使用 Perl;)

测试

perl -pe 's/&/&amp;/' myfile.xml

并做出就地编辑

perl -pi -e 's/&/&amp;/' myfile.xml

但仅一次。

该命令执行后,的内容myfile.xml

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello &amp; How are you?</d>
</a>

答案2

由于特殊字符,您需要逃脱。并且您需要两次通行证才能完成。

使用:
1. sed 's|Hi\&|Hi\&amp;|g' yourfile.xml. 这将产生:

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello & How are you?</d>
</a>
  1. 第二遍将是:sed 's|Hello\ \&| \Hello\ \&amp;|g' test.xml。产生:

    <!--This is an xml document for test-->
    <a><!--This is root node-->
       <b>
        <c>Hi&amp;Welcome</c>
       </b>
       <d> Hello &amp; How are you?</d>
    </a>
    

    当然,使用-i开关可以使其永久生效。

根据以下@terdon 评论的另一种高级方法是:

sed -e 's/Hello &/Hello \&amp;/' -e 's/Hi&/Hi\&amp;/' filename.xml

相关内容