通过bash

时间:2018-07-24 16:46:34

标签: xml bash xmlstarlet

我有一个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,因此如果由于某种原因该特定行的末尾有多余的空间或类似的内容,那么它将失败。我正在寻找使用xmlstarlet的更优雅,更可靠的解决方案。

1 个答案:

答案 0 :(得分:1)

使用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