YAML工具yq介绍与使用指南

发布于:2025-06-20 ⋅ 阅读:(10) ⋅ 点赞:(0)

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 密集型工作流。


网络资料

GitHub仓库


网站公告

今日签到

点亮在社区的每一天
去签到