通过bash替换XML文件中的值

通过bash替换XML文件中的值,xml,bash,xmlstarlet,Xml,Bash,Xmlstarlet,我有一个XML文件,我正在尝试通过bash脚本中的xmlstarlet进行编辑,但我找不到任何XML格式与此相同的示例。下面是xml <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="StringCollections" type="ALINetCoreConsole.Config.StringCollections,

我有一个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的更优雅、更可靠的解决方案。

使用xmlstarlet更新属性:

xmlstarlet edit --update '//add[@value="192.168.xx.xx"]/@value' --value '1.2.3.4' file.xml


欢迎来到StackOverflow!最好包括您所做的工作,以便我们可以帮助您。通常情况下,这不是一个代码编写服务-更多的是帮助我摆脱困境。我道歉。我做过很多尝试,我做过的一件事,赛德,非常难看。我更多的是寻找做我想做的事情所需要的语法,但我不知道如何在没有为我编写代码的情况下要求它。绝对完美。非常感谢你。我理解处理任何其他值的语法。
xmlstarlet edit --update '//add[@key="TCPAddress"]/@value' --value '1.2.3.4' file.xml