首页/系统/Linux 运维命令速查/yq 查询与编辑 YAML
文本处理77 条

yq 查询与编辑 YAML

YAML 世界的 jq:读取/筛选/改写 K8s 清单与 CI 配置;mikefarah 版支持 -i 原地编辑与 JSON 互转。

Linux 运维命令速查系统更新于 2026-10-13

yq 是什么

yq 是 YAML 世界的 jq:读字段、筛选节点、批量改值、格式互转,一条命令搞定。Kubernetes 清单、CI 配置、容器编排文件都是 YAML,用 yq 提取字段与做条件判断比文本工具可靠,因为它按结构解析而不是按行匹配。要注意同名工具有两个互不兼容的实现,表达式语法差别很大,脚本里必须先确认装的是哪一个。

基本信息

适用平台Linux、macOS、Windows(单文件可执行程序)
语法yq '表达式' 文件.yaml
实现差异有按路径表达式的实现与包装其他引擎的实现,语法不通用
常用能力提取字段、列出键、条件筛选、原地修改、格式互转
原地修改支持直接写回文件
风险重写会规范化格式,注释与空行可能丢失

典型使用场景

  • 从部署清单里批量提取镜像地址或副本数做核对。
  • 批量修改多个 YAML 的某个字段,例如统一镜像版本。
  • 把 YAML 转成 JSON 交给只支持 JSON 的工具处理。
  • 列出编排文件里的全部服务名,做资产或依赖盘点。
  • 条件筛选:找出满足特定条件的条目。

常用写法

常用写法
yq '.spec.containers[].image' deploy.yaml       # 提取字段
yq '.services | keys' docker-compose.yml         # 列出服务名
yq '.[] | select(.name == "app")' list.yaml     # 条件筛选
yq -i '.replicas = 3' deploy.yaml                # 原地修改
yq -o=json '.' config.yaml > config.json         # 转成 JSON
yq --version                                     # 确认是哪个实现
git diff deploy.yaml                             # 改完复核差异

场景与写法对照

场景写法使用要点
提取字段按路径选择结构解析,比按行匹配可靠
列出键取键集合盘点服务名与字段很方便
条件筛选按表达式过滤比逐文件人工核对快
原地修改直接写回文件先不带写入参数预览输出再落地
格式互转指定输出格式交给 JSON 工具链时常用
版本确认查版本两个实现语法不同,必查
两个同名工具语法不兼容:一个按路径表达式,一个包装其他引擎。脚本里必须先用版本命令确认实现,否则表达式可能完全不起作用。
原地修改会规范化整个文件的格式:注释与空行可能被重新排列甚至丢失,改前先提交版本控制,改后用差异对比复核。
改 Kubernetes 配置时先不带写入参数打印一遍结果,确认结构无误再原地落地,避免把清单改坏。

易错点

  • 混用两个不同实现的语法,表达式报错或静默返回空结果,误判为字段不存在。
  • 直接原地修改没有版本控制的 YAML,注释与格式被规范化后无法恢复。
  • 用按行文本替换的方式改 YAML 缩进层级,结构被破坏导致解析失败;结构化修改要用结构化工具。
  • 修改后不做差异复核,误改了其他字段或缩进,部署时才暴露问题。

数据来源与参考

  • mikefarah/yq 官方文档(GitHub README)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌