如何使用mikefarah's yq修改类数组格式的YAML字符串值?
使用mikefarah's yq替换YAML多行字符串的正确命令
输入文件(input.yaml)
data: key1: | - name: valueA - name: valueB
期望输出(output.yaml)
data: key1: | - name: valueC - name: valueD
之前的错误尝试
执行了这条命令:
yq -i e '.data.key1 |= "- name: valueC"' in.yaml
得到了不符合预期的结果:
data: key1: |- - name: valueC
出现的问题:
- 命令用法错误,无法正确替换多行内容
- 生成了非预期的
|-折叠块标量,会自动去除末尾换行 - 仅替换了单行内容,丢失了原有的多行结构
正确命令
要完整替换该多行块标量并保留原有的|格式,有几种可靠的实现方式:
方式1:终端直接输入多行内容
yq -i e '.data.key1 = "| - name: valueC - name: valueD"' input.yaml
注意内容的缩进要和原文件key1下的内容对齐,避免破坏YAML格式。
方式2:用heredoc避免转义麻烦(推荐处理长内容)
yq -i e '.data.key1 = $newContent' input.yaml <<EOF newContent="| - name: valueC - name: valueD" EOF
方式3:用setstr强制指定块标量格式
yq -i e '.data.key1 |= setstr("| - name: valueC - name: valueD")' input.yaml
此方法可确保yq不会自动将|转换为|-,严格保留块标量的原始格式。
内容的提问来源于stack exchange,提问作者user1240076
相关产品推荐
相关产品推荐

