我有一些散落着这样的标签的xml文件:
<?xm-insertion_mark_start author="some_author" time="20050602T125956-0500"?>
我如何剥离这样的插入物?我试过这个有用:
sed -e 's/<\?xm.*?\?>//g' in.xml > out.xml
答案 0 :(得分:2)
使用delete(d)命令sed:
代替替代品也可以像这样使用sed -i
(内联):
sed -i.bak '/<?xm.*?>/d' in.xml
使用grep:
grep -v '<\?xm.*\?>' in.xml > out.xml
警告:shell实用程序并不总是解析和解决方案的最佳工具。编辑XML数据。
答案 1 :(得分:1)
sed没有不情愿(“非贪婪”)的量词。试试这个:
sed '/<?xm\([^?][^>]\)\+?>/d' in.xml > out.xml
编辑:当然,您可以使用XSLT从XML中安全地删除处理指令(PI)。
这会删除名为xm-insertion_mark_start
的所有PI,但不会保留所有剩余的XML。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="processing-instruction('xm-insertion_mark_start')" />
</xsl:stylesheet>
使用
<xsl:template match="processing-instruction()" />
如果您要删除所有 PI,无论其姓名如何。
您可以使用xsltproc(1)
在命令行上将转换应用于XML。