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

如何用Shell解析列表并更新多份YAML配置文件

解决方案:解析文本并批量更新YAML中的Ingress路径字段

要实现需求,不建议用纯shell工具(如cut、sed)直接修改YAML(YAML结构敏感,纯文本处理易出错),推荐使用专门的YAML处理工具yq配合shell脚本完成。以下是具体步骤:

1. 准备工作

安装yq(推荐v4版本,语法更直观):

  • Debian/Ubuntu系统:sudo apt install yq
  • macOS系统:brew install yq
  • 其他系统可自行编译安装对应版本

2. 编写批量处理脚本

创建名为update_ingress_paths.sh的脚本,内容如下:

#!/bin/bash

# 输入文本文件路径(可根据实际修改)
INPUT_FILE="paths.txt"

# 逐行解析文本文件
while IFS='|' read -r service auth_path; do
    # 清理服务名、auth、路径的前后空格
    service=$(echo "$service" | xargs)
    auth=$(echo "$auth_path" | awk '{print $1}' | xargs)
    path=$(echo "$auth_path" | awk '{print substr($0, index($0,$2))}' | xargs)
    
    # 对应服务的YAML文件
    yaml_file="${service}.yaml"
    
    # 跳过不存在的YAML文件
    [ ! -f "$yaml_file" ] && echo "警告:$yaml_file 不存在,跳过" && continue
    
    # 用yq更新YAML:找到对应auth的实例,将路径追加到path数组
    yq eval ".ingress.instances[] |= (select(.auth == \"$auth\") .path += [\"$path\"])" -i "$yaml_file"
done < "$INPUT_FILE"

3. 调整YAML文件格式

确保服务YAML文件中的path字段为数组类型(否则无法追加多个路径),可将原有占位符替换为空数组:

ingress: 
  instances: 
    - auth: a
      path: []
    - auth: b
      path: []

4. 执行脚本

  1. 给脚本添加执行权限:chmod +x update_ingress_paths.sh
  2. 运行脚本:./update_ingress_paths.sh

关键说明

  • 若需覆盖原有路径而非追加,将脚本中的.path += ["$path"]改为.path = ["$path"]
  • 脚本会自动处理文本中的空格问题,避免因空格导致匹配错误
  • yq的-i参数表示直接修改原YAML文件,若要先预览修改效果,可去掉-i参数查看输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:30:53