yq v4打印带完整键路径的所有键值对的正确语法是什么
yq v4 输出带完整路径键值对的实现方法
你要的和v3命令等效的v4写法如下:
cat << EOF | yq e 'paths(scalars) as $p | "\($p | join(".")): \(getpath($p))"' - a: b: foo c: bar EOF
运行后输出和你v3的结果完全一致:
a.b: foo a.c: bar
语法说明
paths(scalars):递归遍历YAML中所有存实际值的叶节点(标量节点),返回每个节点的路径数组,比如a.b对应的路径数组为["a", "b"]as $p:将遍历到的路径数组暂存到变量$p中join("."):将路径数组用.拼接为点分隔的全路径格式getpath($p):获取当前路径对应的实际值
特殊场景适配
如果你的YAML键名本身包含.,可以修改join的拼接符避免混淆,比如用/作为分隔符:
yq e 'paths(scalars) as $p | "\($p | join("/")): \(getpath($p))"' your_file.yaml
内容的提问来源于stack exchange,提问作者Andy Edgar
相关产品推荐
相关产品推荐

