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

如何使用awk根据strings.txt映射关系批量替换多个XML文件中的对应字符串

替换功能实现脚本

awk -i inplace '
# 读取strings.txt构建替换映射表
NR == FNR {
    # 仅处理存在两个字段的有效行,跳过空行
    if (NF == 2) {
        map[$1] = $2
    }
    next
}
# 处理所有XML文件
{
    # 遍历映射表,替换当前行所有匹配的字符串
    for (old_str in map) {
        gsub(old_str, map[old_str])
    }
    # 输出处理后的行
    print
}' strings.txt *.xml

代码说明

  • 执行逻辑分为两个阶段:第一阶段仅处理第一个输入文件strings.txt,将每行第一个字符串作为查找键,第二个字符串作为替换值存入映射表,自动跳过空行避免报错
  • 第二阶段处理所有传入的XML文件,逐行扫描替换所有匹配到的字符串,gsub会替换一行内所有匹配的内容,如果你只需要替换每行第一个匹配项,把gsub改成sub即可
  • -i inplace参数会直接修改原XML文件,如果你需要保留原文件备份,可以把参数改成-i inplace=.bak,执行后会自动生成原文件的.bak后缀备份
  • 末尾的*.xml会匹配当前目录下所有XML文件,你也可以手动指定需要处理的XML文件名,例如File1.xml File2.xml File3.xml

特殊场景适配:如果strings.txt第一列的字符串包含正则特殊字符(如.、*、+、$等),上述正则匹配可能出现预期外的结果,此时可以把XML处理阶段的替换逻辑改成纯文本匹配版本:

{
    for (old_str in map) {
        new_str = map[old_str]
        len_old = length(old_str)
        # 循环替换当前行所有匹配的纯文本内容
        while (pos = index($0, old_str)) {
            $0 = substr($0, 1, pos - 1) new_str substr($0, pos + len_old)
        }
    }
    print
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:39:01