文章目录
yq 工具介绍与使用指南
什么是 yq
yq 是一个轻量级、便携式的命令行 YAML 处理器,类似于 jq 但专门用于处理 YAML 文件。它可以帮助你查询、修改和转换 YAML 数据。
主要特性
- 支持 YAML 文件的查询、编辑和转换
- 语法类似于 jq,学习曲线平缓
- 支持跨平台(Linux, macOS, Windows)
- 可以处理 JSON 和 XML(部分版本)
- 支持复杂的数据操作和转换
安装方法
macOS
brew install yq
Linux
sudo apt-get update && sudo apt-get install yq # Debian/Ubuntu
sudo dnf install yq # Fedora
使用 Go 安装
go install github.com/mikefarah/yq/v4@latest
其他方式
可以从 GitHub 发布页面下载预编译的二进制文件。
基本使用方法
读取值
yq '.key' file.yaml
读取嵌套值
yq '.parent.child' file.yaml
读取数组元素
yq '.array[0]' file.yaml
修改值
yq -i '.key = "new value"' file.yaml
添加新字段
yq -i '.newKey = "value"' file.yaml
删除字段
yq -i 'del(.keyToRemove)' file.yaml
合并 YAML 文件
yq eval-all 'select(fileIndex == 0) * select(fileIndex == 1)' file1.yaml file2.yaml
转换为 JSON
yq -o=json file.yaml
从 JSON 转换为 YAML
yq -P -o=yaml file.json
高级用法
处理多个文档
yq eval '.[] | .key' multi-doc.yaml
使用过滤器
yq '.array[] | select(.property == "value")' file.yaml
环境变量替换
yq '.key = env(VAR_NAME)' file.yaml
复杂转换
yq '.array |= map(. + {"newField": "value"})' file.yaml
常用场景示例
1. 修改 Kubernetes YAML
yq -i '.metadata.labels.app = "new-app"' deployment.yaml
2. 提取所有容器镜像
yq '.spec.template.spec.containers[].image' deployment.yaml
3. 添加新环境变量
yq -i '.spec.template.spec.containers[0].env += {"name": "NEW_VAR", "value": "value"}' deployment.yaml
4. 多文件操作
yq eval-all 'select(fileIndex == 0).common * select(fileIndex == 1).overrides' base.yaml override.yaml
版本差异
注意 yq 有 v3 和 v4 版本,语法有较大变化。推荐使用 v4 版本。可以通过 yq --version
查看版本信息。
帮助信息
获取完整帮助:
yq --help
yq 是一个功能强大的工具,特别适合处理 Kubernetes 配置、CI/CD 流水线和其他 YAML 密集型工作流。