修改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
相关产品推荐
相关产品推荐

