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

Azure构建管道Bash脚本:用sed插入XML内容到指定位置

在Azure构建管道Bash脚本中插入XML内容到指定位置

问题说明

现有两个XML文件:

file1.xml内容

<loginIpRanges>
    <description>undefined</description>
    <endAddress>1.2.3.4</endAddress>
    <startAddress>1.2.3.0</startAddress>
</loginIpRanges>

file2.xml内容

<?xml version="1.0" encoding="UTF-8"?>
<Profile xmlns="http://soap.sforce.com/2006/04/metadata">
    <applicationVisibilities>
        <application>standard__S</application>
        <default>false</default>
        <visible>false</visible>
    </applicationVisibilities>
    <custom>true</custom>
    <userPermissions>
        <enabled>true</enabled>
        <name>ViewRoles</name>
    </userPermissions>
</Profile> 

需求:将file1.xml的全部内容插入到file2.xml中<custom>true</custom>标签之后、<userPermissions>标签之前,得到目标XML结构。

可行解决方案

方法1:使用sed命令(简洁高效)

利用sed的r命令在匹配行后插入外部文件内容,适配Azure管道的Ubuntu环境(GNU sed):

# 匹配指定行并插入file1内容,生成备份后清理
sed -i.bak '/^\s*<custom>true<\/custom>\s*$/r file1.xml' file2.xml && rm file2.xml.bak
  • /^\s*<custom>true<\/custom>\s*$/:精确匹配带任意前后空格的目标行,避免误匹配
  • r file1.xml:在匹配行后插入file1.xml的全部内容
  • -i.bak:直接修改原文件并生成备份,执行后删除备份文件

方法2:使用awk命令(适配复杂XML结构)

如果XML格式有变动,awk逻辑更稳定,确保插入位置准确:

# 遍历file2,匹配到目标行时插入file1内容,替换原文件
awk '
{print}
/<custom>true<\/custom>/ {
    while ((getline line < "file1.xml") > 0) {
        print line
    }
    close("file1.xml")
}
' file2.xml > temp.xml && mv temp.xml file2.xml
  • 逻辑说明:逐行打印file2.xml内容,匹配到目标行时读取并打印file1.xml的所有内容,完成后继续处理后续行
  • 通过临时文件替换原文件,实现修改

最终效果

执行任一命令后,file2.xml将变为:

<?xml version="1.0" encoding="UTF-8"?>
<Profile xmlns="http://soap.sforce.com/2006/04/metadata">
    <applicationVisibilities>
        <application>standard__S</application>
        <default>false</default>
        <visible>false</visible>
    </applicationVisibilities>
    <custom>true</custom>
    <loginIpRanges>
        <description>undefined</description>
        <endAddress>1.2.3.4</endAddress>
        <startAddress>1.2.3.0</startAddress>
    </loginIpRanges>
    <userPermissions>
        <enabled>true</enabled>
        <name>ViewRoles</name>
    </userPermissions>
</Profile> 

内容的提问来源于stack exchange,提问作者Sambit Swain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:40:18