如何使用Sed / xmlparser更新具有许多单极字符的多行

时间:2019-07-04 02:14:38

标签: xml bash sed

我正在与sed一起在特定的模式匹配之后添加新数据。 在这种情况下,我可以在单行中使用sed并在使用多行表达式时接收异常。

Data before Deserialization.
name = ab
age = 0
name = cd
age = 0
Object has been serialized


Data will be Deserialize.
Object has been deserialized
Data after Deserialization.
name = ab
age = 0
name = cd
age = 0

我只需要在<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <config xmlns="http://artifactory.jfrog.org/xsd/2.1.7" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jfrog.org/xsd/artifactory-v2_1_7.xsd"> <backups> <backup> <key>backup-weekly</key> <enabled>false</enabled> <cronExp>0 0 2 ? * SAT</cronExp> <retentionPeriodHours>336</retentionPeriodHours> <createArchive>false</createArchive> <excludedRepositories/> </backup> <backups> </config> 之后添加一些东西,但需要确认已启用的密钥应在<enabled>false</enabled>以下,并且更新后的内容如下所示

<key>backup-weekly</key>

1 个答案:

答案 0 :(得分:1)

一种方法是使用XSLT。例如,将其另存为 yourfile.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
xmlns="http://artifactory.jfrog.org/xsd/2.1.7">
    <xsl:output indent="yes" method="xml" encoding="utf-8" />
    <xsl:strip-space elements="*"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="//*[name()='backup'][./*[name()='key']='backup-weekly']/*[name()='enabled'][.='false']">
        <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
        <dir>/opt/jfrog/data/backup</dir>
    </xsl:template>
</xsl:stylesheet>

并在此命令行中使用 xsltproc

xsltproc yourfile.xsl yourfile.xml