我必须清理一个文件(xml),比如
...
<MSGD:abc xmlns:MSGD="urn:def:xsd:abc.0.0.0">
<HTRT:xyz>00000000</HTRT:xyz>
...
到
<abc xmlns:MSGD="urn:def:xsd:abc.0.0.0">
<xyz>00000000</xyz>
我搜索并尝试使用sed,因为sed -e 's/<.*:/</g' test.xml
但是没找到正确的方法
<abc.0.0.0">
<xyz>
有什么建议吗?
答案 0 :(得分:0)
因此,如果名称开头出现在:
之前,您希望删除XML标记名称中的大写文本。
只需一个命令:
$ sed -r 's#(</?)[A-Z]*:#\1#g' file
<abc xmlns:MSGD="urn:def:xsd:abc.0.0.0">
<xyz>00000000</xyz>
(</?)[A-Z]*:
查找<
+可选/
+大写字母+ :
并抓住第一个区块<
+可选{{1} })。/
替换为catched group \1
或者,分两步:
g
sed -e 's#<[A-Z]*:#<#' -e 's#</[A-Z]*:#</#' file
允许您在同一-e
调用中执行两个命令。sed
查找s/<[A-Z]*:/</
+大写字母,并将其替换为<
。<
查找s#</[A-Z]*#</#
+大写字母,并将其替换为</
。答案 1 :(得分:0)
试试这个:
sed 's/<[^ >]*:/</g' myfile.txt
答案 2 :(得分:0)
sed 's#<\([^:>]*\):\(.*\)\(/\1\)#<\2#;t
s#<[^:>]*:#<#' YourFile
posix版本(GNU sed上的--posix
)
首先测试是否在关闭标记中有剩余的“前缀”,如果没有,只尝试删除前缀