通过 bash 替换 XML 文件中的值
Replacing a value in XML file via bash
我有一个 XML 文件,我正在尝试通过 bash 脚本中的 xmlstarlet 进行编辑,但我找不到任何包含 xml 的示例格式与此相同。下面是 xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="StringCollections" type="ALINetCoreConsole.Config.StringCollections, ALINetCoreConsole"/>
</configSections>
<appSettings>
<add key="TCPAddress" value="192.168.xx.xx"/>
<add key="TCPPort" value="2101" />
<add key="ParsingFilesDirectory" value="/app/aliparsing"/>
<add key="MessageBossAddress" value="messageboss:9092"/>
<add key="AliRulesetReloadMinutes" value="30"/>
<add key="PsapId" value=""/>
<add key="MessageStarter" value="2"/>
<add key="MessageEnder" value="3"/>
<!-- Possible values are: Warn, Info, Debug -->
<add key="LogLevel" value="Warn"/>
</appSettings>
<StringCollections>
<HeartbeatValues>
<add message="K"/>
<add message="H"/>
</HeartbeatValues>
</StringCollections>
</configuration>
我试图通过 xmlstarlet 更改的具体值是 value="192.168.xx.xx"
到目前为止,我已经弄清楚如何删除整行,但我并没有点击正确的语法来更改“值”字段中的 IP 地址。
我目前编写了使用 sed 查找和替换 IP 的脚本,但它很丑陋并且依赖于 cut/rev 所以如果由于某种原因该特定行在末尾有一个额外的 space或类似的东西然后它会失败。我正在寻找 xmlstarlet 的更优雅和可靠的解决方案。
使用 xmlstartlet 更新属性:
xmlstarlet edit --update '//add[@value="192.168.xx.xx"]/@value' --value '1.2.3.4' file.xml
或
xmlstarlet edit --update '//add[@key="TCPAddress"]/@value' --value '1.2.3.4' file.xml
我有一个 XML 文件,我正在尝试通过 bash 脚本中的 xmlstarlet 进行编辑,但我找不到任何包含 xml 的示例格式与此相同。下面是 xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="StringCollections" type="ALINetCoreConsole.Config.StringCollections, ALINetCoreConsole"/>
</configSections>
<appSettings>
<add key="TCPAddress" value="192.168.xx.xx"/>
<add key="TCPPort" value="2101" />
<add key="ParsingFilesDirectory" value="/app/aliparsing"/>
<add key="MessageBossAddress" value="messageboss:9092"/>
<add key="AliRulesetReloadMinutes" value="30"/>
<add key="PsapId" value=""/>
<add key="MessageStarter" value="2"/>
<add key="MessageEnder" value="3"/>
<!-- Possible values are: Warn, Info, Debug -->
<add key="LogLevel" value="Warn"/>
</appSettings>
<StringCollections>
<HeartbeatValues>
<add message="K"/>
<add message="H"/>
</HeartbeatValues>
</StringCollections>
</configuration>
我试图通过 xmlstarlet 更改的具体值是 value="192.168.xx.xx"
到目前为止,我已经弄清楚如何删除整行,但我并没有点击正确的语法来更改“值”字段中的 IP 地址。
我目前编写了使用 sed 查找和替换 IP 的脚本,但它很丑陋并且依赖于 cut/rev 所以如果由于某种原因该特定行在末尾有一个额外的 space或类似的东西然后它会失败。我正在寻找 xmlstarlet 的更优雅和可靠的解决方案。
使用 xmlstartlet 更新属性:
xmlstarlet edit --update '//add[@value="192.168.xx.xx"]/@value' --value '1.2.3.4' file.xml
或
xmlstarlet edit --update '//add[@key="TCPAddress"]/@value' --value '1.2.3.4' file.xml