You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unix环境下如何通过CLI修改XML文件中的属性值?

问题

想要将XML文件中的该行:

<dp:request domain="@DOMAIN@">

替换为:

<dp:request domain="export">

尝试了以下sed命令但均未成功:

  • sed -i -e "s/<dp:request domain="export">/<dp:request domain="@DOMAIN@">/g" file.xml
  • sed -i s#<dp:request domain="export">#<dp:request domain="@DOMAIN@">#g file.xml

对应的XML文件内容:

<?xml version="1.0"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dp="http://www.datapower.com/schemas/management" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <env:Body>
    <dp:request domain="@DOMAIN@">
      <dp:set-config>
        <ConfigDeploymentPolicy name="@DEPLOYMENTPOLICYNAME@">
          <ModifiedConfig>
            <Match>*/*/crypto/cert?Name=HHMM&amp;Property=Filename</Match>
            <Type>change</Type>
            <Property/>
            <Value>@HHMM.crypto.cert.FileName@</Value>
          </ModifiedConfig>
        </ConfigDeploymentPolicy>
      </dp:set-config>
    </dp:request>
  </env:Body>
</env:Envelope>
原因与解决方案

核心问题:替换方向完全写反

你之前的所有命令都是把export替换成@DOMAIN@,和实际需求完全相反,这是替换失败的主要原因。

次要问题:引号未正确转义

第一个命令用双引号包裹整个sed表达式,但表达式内部的双引号没有转义,会被shell错误解析,导致命令截断失效。

正确的sed命令

以下几种方式都能实现需求:

方式1:转义内部双引号

sed -i -e "s/<dp:request domain=\"@DOMAIN@\">/<dp:request domain=\"export\">/g" file.xml

方式2:用单引号包裹表达式(推荐)

单引号内部的特殊字符不会被shell解析,写法更简洁:

sed -i 's/<dp:request domain="@DOMAIN@">/<dp:request domain="export">/g' file.xml

方式3:使用自定义分隔符

sed -i s#<dp:request domain="@DOMAIN@">#<dp:request domain="export">#g file.xml

验证结果

执行命令后,XML文件中对应行会变为:

<dp:request domain="export">

内容的提问来源于stack exchange,提问作者Shubham Gurao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:09:26