我有一个名为 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&Welcome</c>
</b>
<d>Hello & How are you?</d>
</a>
我使用 sed 命令将所有出现的 & 更改为 &
sed -i 's:&:&:' myfile.xml
但我收到“未定义标签‘yfile.xml’”错误。我无法继续。该怎么办?
答案1
如果你没有GNU sed,sed
需要一个参数-i
sed -i.bak 's:&:&:' myfile.xml
并且备份文件是一个好主意或者……
…使用 Perl;)
测试
perl -pe 's/&/&/' myfile.xml
并做出就地编辑和
perl -pi -e 's/&/&/' myfile.xml
但仅一次。
该命令执行后,的内容myfile.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>
答案2
由于特殊字符,您需要逃脱。并且您需要两次通行证才能完成。
使用:
1. sed 's|Hi\&|Hi\&|g' yourfile.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>
第二遍将是:
sed 's|Hello\ \&| \Hello\ \&|g' test.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>
当然,使用
-i
开关可以使其永久生效。
根据以下@terdon 评论的另一种高级方法是:
sed -e 's/Hello &/Hello \&/' -e 's/Hi&/Hi\&/' filename.xml