我有一些 xml 文件散布着这样的标签:
<?xm-insertion_mark_start author="some_author" time="20050602T125956-0500"?>
我将如何剥离这些插入物?我试过这个有用:
sed -e 's/<\?xm.*?\?>//g' in.xml > out.xml
我有一些 xml 文件散布着这样的标签:
<?xm-insertion_mark_start author="some_author" time="20050602T125956-0500"?>
我将如何剥离这些插入物?我试过这个有用:
sed -e 's/<\?xm.*?\?>//g' in.xml > out.xml
使用 sed 的 delete (d) 命令代替替换 (s):
也像这样使用sed -i
(内联):
sed -i.bak '/<?xm.*?>/d' in.xml
使用 grep:
grep -v '<\?xm.*\?>' in.xml > out.xml
注意:shell 实用程序并不总是解析和编辑 XML 数据的最佳工具。
sed 没有不情愿(“非贪婪”)量词。尝试这个:
sed '/<?xm\([^?][^>]\)\+?>/d' in.xml > out.xml
编辑:当然,您可以使用 XSLT 从 XML 中安全地删除处理指令 (PI)。
这将删除所有命名的 PI xm-insertion_mark_start
,但保留所有剩余的 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。