0

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

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

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

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

2 回答 2

2

使用 sed 的 delete (d) 命令代替替换 (s):

也像这样使用sed -i(内联):

sed -i.bak '/<?xm.*?>/d' in.xml

使用 grep:

grep -v '<\?xm.*\?>' in.xml > out.xml

注意:shell 实用程序并不总是解析和编辑 XML 数据的最佳工具。

于 2013-07-31T18:28:10.080 回答
1

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。

于 2013-07-31T18:34:57.343 回答