SED - 从XML文件中剥离某些标记

时间:2013-07-31 18:24:01

标签: xml xml-parsing sed

我有一些散落着这样的标签的xml文件:

<?xm-insertion_mark_start author="some_author" time="20050602T125956-0500"?>  

我如何剥离这样的插入物?我试过这个有用:

sed -e 's/<\?xm.*?\?>//g' in.xml > out.xml

2 个答案:

答案 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。