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

如何使用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. 命令用法错误,无法正确替换多行内容
  2. 生成了非预期的|-折叠块标量,会自动去除末尾换行
  3. 仅替换了单行内容,丢失了原有的多行结构

正确命令

要完整替换该多行块标量并保留原有的|格式,有几种可靠的实现方式:

方式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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:57:13