文章目录
- [yq:命令行下的 YAML 和 JSON 处理利器](#yq:命令行下的 YAML 和 JSON 处理利器)
yq:命令行下的 YAML 和 JSON 处理利器

yq 在 GitHub 上已经拿到 15,653 Star。
它是一个轻量级的命令行 YAML、JSON、INI 和 XML 处理器,用 Go 编写,编译后只有一个独立二进制文件,无需任何依赖。它的语法和 JSON 处理器 jq 一致,但原生支持 YAML、XML、CSV、TSV 等格式。
1、这玩意儿是干嘛的
一句话:用 jq 的语法处理 YAML 和更多格式的文件。
jq 专精 JSON,yq 则把同样的过滤和转换能力扩展到了 YAML、XML、INI、Properties、CSV、TSV、TOML、HCL、Lua 等格式。不管是读值、更新、合并还是格式转换,一条命令搞定。

2、基本用法
读一个值:
bash
yq '.a.b[0].c' file.yaml
管道输入:
bash
yq '.a.b[0].c' < file.yaml
原地更新:
bash
yq -i '.a.b[0].c = "cool"' file.yaml
通过环境变量更新:
bash
NAME=mike yq -i '.a.b[0].c = strenv(NAME)' file.yaml
3、进阶操作
合并多个文件:
bash
yq -n 'load("file1.yaml") * load("file2.yaml")'
用通配符合并:
bash
yq ea '. as $item ireduce ({}; . * $item )' path/to/*.yml
在数组中查找并更新:
bash
yq -i '(.[] | select(.name == "foo") | .address) = "12 cat st"' data.yaml
格式互转:
bash
yq -Poy sample.json
yq -o json file.yaml
yq -o yaml file.xml
4、安装方式
编译好的二进制文件可以直接下载,支持 Linux、macOS、Windows、ARM 等平台。
bash
# 下载最新版 Linux AMD64
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/local/bin/yq && chmod +x /usr/local/bin/yq
Homebrew 安装:
bash
brew install yq
Go 安装:
bash
go install github.com/mikefarah/yq/v4@latest
Docker 运行:
bash
docker run --rm -v "${PWD}":/workdir mikefarah/yq '.a.b[0].c' file.yaml
Windows 用户可以用 Chocolatey 或 scoop:
bash
choco install yq
scoop install main/yq
5、主要特性
- 语法和 jq 一致,学习成本低
- 支持多文档 YAML 和 front matter
- 彩色输出,方便阅读
- 日期时间处理和格式化
- 保留 YAML 注释和格式
- 支持 base64 编解码
- 从其他文件加载内容
- 支持 shell 补全脚本
- reduce 操作,可合并多个文件或对数组求和
6、适合谁用
经常需要在命令行处理 YAML、JSON、配置文件、CI 配置、Kubernetes manifest 的开发和运维人员。jq 用户可以直接上手,不需要重新学习新语法。
e 操作,可合并多个文件或对数组求和
6、适合谁用
经常需要在命令行处理 YAML、JSON、配置文件、CI 配置、Kubernetes manifest 的开发和运维人员。jq 用户可以直接上手,不需要重新学习新语法。