9个版本

0.3.6 2023年9月6日
0.3.5 2023年9月6日
0.2.0 2023年9月5日
0.1.0 2023年8月31日

#1293解析实现

34 每月下载量

Apache-2.0

18KB
127

yq

CI Crates.io

又一版jq包装器

A lightweight and portable Rust implementation of the common jq wrapper; yq for doing arbitrary jq style queries on YAML documents.

安装

通过 cargo

cargo install yjq

或从 发布 下载预构建版本,手动或通过 binstall

cargo binstall yjq

注意:依赖于已安装的 jq

特性

  • 在yaml输入上使用任意的 jq 语法进行查询(我们传递大多数参数给 jq
  • 处理多文档yaml输入(返回文档向量)
  • 解包yaml标签(输入是 单例映射 递归
  • 允许将 jq 输出转换为 YAML (-y) 或 TOML (-t)

使用方法

作为 jq 使用,通过 stdin

$ yq '.[3].kind' -r < test/deploy.yaml
Service

$ yq -y '.[3].metadata' < test/deploy.yaml
labels:
  app: controller
name: controller
namespace: default

或从文件参数(在最后)

$ yq '.[3].kind' -r test/deploy.yaml
$ yq -y '.[3].metadata' test/deploy.yaml

如果通过管道传递,则始终使用stdin。

高级示例

使用嵌套查询和原始输出进行选择

$ yq '.spec.template.spec.containers[].image' -r < test/grafana.yaml
quay.io/kiwigrid/k8s-sidecar:1.24.6
quay.io/kiwigrid/k8s-sidecar:1.24.6
docker.io/grafana/grafana:10.1.0

在多文档上选择

$ yq -y '.[] | select(.kind == "Deployment") | .spec.template.spec.containers[0].ports[0].containerPort' test/deploy.yaml
8000

转义包含斜杠等的键

yq -y '.updates[] | select(.["package-ecosystem"] == "cargo") | .groups' .github/dependabot.yml

参数优先级

除了输出选择器(如 -y-t)之外的所有参数都传递给 jq

约定:将 yq 参数放在前面,将 jq 参数放在后面。如果它抱怨,请使用 -- 将参数组分开。

解释:参数解析器通常在与包含标志的剩余位置参数作斗争,因为它们缺乏“我们的标志”和“他们的标志”的概念,并会试图将它们匹配在一起。这意味着将yq和jq标志合并到单个参数中不会起作用,这就是为什么存在将两个参数明确分开的惯例。通常,如果您在中间放置一个正常的jq查询,分离会自动推断,但如果您没有任何正常的位置值参数,您可以在后面放置一个--变量参数分隔符,以表明所有剩余的标志都是为jq

yq -y -c '.[3].kind' < test/deploy.yaml # fails; implicit separation is not detected for a flag first
yq -y '.[3].kind' -c < test/deploy.yaml # works; implicit separation detected after positional
yq -yc '.[3].kind' < test/deploy.yaml # fails; cannot combine of yq and jq args
yq -y -- -c '.[3].kind' < test/deploy.yaml # works; explicit separation

输出注意事项

输出格式,如用于YAML的-y或用于TOML的-t,将需要jq的输出可解析为JSON。如果您传递了-r用于原始输出,那么这将不能作为JSON解析。

限制

仅支持YAML/TOML(不支持XML - 欢迎提交PR)。调用jq的外部命令。不保留YAML标签(输入是单例映射 递归)。CI上还没有二进制构建。

依赖关系

~7.5–10MB
~177K SLoC