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

修改YAML文件内容后输出无法保留缩进的技术求助

问题分析

你的脚本有两个核心问题导致YAML格式损坏:

  • 拼接新内容时没有保留换行符,所有行被挤成一行,完全破坏了YAML的行结构
  • 替换文本时没有保留原行的缩进空格,且匹配条件仅能精准匹配无缩进的text行,无法匹配带缩进的目标行
修正后的脚本
mapfile -t lines_array < "$input_file_yaml"

# 初始化新数组
novo_array=()

for line in "${lines_array[@]}"; do
    # 匹配以任意缩进开头、内容为text的行,捕获缩进部分
    if [[ "$line" =~ ^([[:space:]]*)text$ ]]; then
        # 保留原缩进,替换内容部分
        line="${BASH_REMATCH[1]}other text"
    fi
    # 将处理后的行加入新数组
    novo_array+=("$line")
done

# 将数组内容按行写入文件,保证格式正确
printf "%s\n" "${novo_array[@]}" > novo_compose.yaml
关键改动说明
  • 改用数组存储处理后的行,避免字符串拼接丢失换行符
  • 使用正则^([[:space:]]*)text$捕获行首的所有缩进空格,替换时保留这些空格,确保YAML缩进格式符合要求
  • 用printf "%s\n"输出数组内容,保证每行独立,还原YAML的行结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:33:13