我有一个包含代码的 XML 文件,为了将其与 xmllink 一起使用,我需要删除一个链接。
XML 文件包含:
<xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PackingList xmlns="Link to somewhere#">
<morecode></morecode>
使用 sed'sed s/PackingList.*\>/PackingList/g' xmlfile
得到以下结果(在第二行):
<PackingList#">
虽然应该
<PackingList>
我究竟做错了什么?
答案1
有三个错误:-
- 命令中的第一个引号
sed
应该位于s/
选项之前,而不是位于sed
其本身之前 - 我认为这是一个输入错误。 - 该
>
字符在正则表达式中没有特殊含义,不能转义 - 该序列\>
具有特殊意义:它意味着单词结尾,并且由于是.*
“贪婪的”,它会匹配行上最后一个单词的结尾,因此保留#"
。 - 如果匹配源
>
,这将包含在要替换的字符串中,因此它也必须出现在替换字符串中。
因此你的编辑命令应该是:
sed 's/PackingList.*>/PackingList>/g' xmlfile
这与 jherran 的解决方案类似,但考虑到了您最初的匹配尝试。匹配尾随的双引号可能会更简洁:
sed 's/PackingList.*"/PackingList/g' xmlfile
如果您不想依赖贪婪(并使其更具可读性),请使用:
sed 's/PackingList.*".*"/PackingList/g' xmlfile
请注意,同一行上的任何后续 XML 标记都可能被上述任何一项删除:为避免这种情况,请使用:
sed 's/PackingList[^>]*"[^>]*"/PackingList/g' xmlfile
答案2
尝试一下这个方法:
sed 's/PackingList.*/PackingList>/g' xmlfile