我正在与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>
答案 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