提取将YAML中的正则表达式与布尔值匹配的键值对

提取将YAML中的正则表达式与布尔值匹配的键值对,yaml,jq,yq,Yaml,Jq,Yq,下面是我的YAML输入,我正在尝试使用yq提取显示的输出。我想删除键名(VAR-A)在value{A.b.VAR-A}(在A.b.之后)中匹配的对,如果在-分隔的值中有多个{A.b.VAR-A},我想保留它们 VAR-A: '{{a.b.VAR-A}}' VAR-B: '{{a.b.VAR-B}}' VAR-C: v0.0 VAR-D: '{{a.b.VAR-D}}-{{a.b.VAR-A}}' VAR-E: '{{a.b.VAR-C}}-{{a.b.VAR-B}}-{{a.b.VAR-A}}'

下面是我的
YAML
输入,我正在尝试使用
yq
提取显示的输出。我想删除键名
(VAR-A)
在value
{A.b.VAR-A}
(在
A.b.
之后)中匹配的对,如果在
-
分隔的值中有多个
{A.b.VAR-A}
,我想保留它们

VAR-A: '{{a.b.VAR-A}}'
VAR-B: '{{a.b.VAR-B}}'
VAR-C: v0.0
VAR-D: '{{a.b.VAR-D}}-{{a.b.VAR-A}}'
VAR-E: '{{a.b.VAR-C}}-{{a.b.VAR-B}}-{{a.b.VAR-A}}'
VAR-F: True
预期输出:

VAR-C: v0.0
VAR-D: '{{a.b.VAR-D}}-{{a.b.VAR-A}}'
VAR-E: '{{a.b.VAR-C}}-{{a.b.VAR-B}}-{{a.b.VAR-A}}'
VAR-F: True
如果我有所有字符串,这个问题就可以解决,但是当我在
yaml
中有
boolean
值时,这个问题就失败了

我得到以下错误:

错误:无法替换为!!布尔,只能替换字符串。提示:对于此操作,您通常希望在“=”上使用“|=”


至少有两个非常不同的现存“yq”项目:一个是基于Python的项目,这是下面第1部分的重点;另一个是基于Go的项目,这是第2部分的重点

第一部分 或

输出: 第二部分 我拥有的基于Go的yq版本(4.6.3)可能无法直接处理您的需求,但这里有一个解决方案,它使用此yq来转换JSON和从JSON转换,并完成其余的工作:

yq -j eval . input.yaml |
  jq  'del(.[] | select(( type == "string" and test("^{{a[.]b[.][^}]*}}$" ))))' > tmp.json
yq -P eval . tmp.json
jq计划的免费版:

map_values( select( type == "string" and test("^{{a[.]b[.][^}]*}}$" | not)
输出:
你的密码在哪里?yq司令部呢?
{
  "VAR-C": "v0.0",
  "VAR-D": "{{a.b.VAR-D}}-{{a.b.VAR-A}}",
  "VAR-E": "{{a.b.VAR-C}}-{{a.b.VAR-B}}-{{a.b.VAR-A}}",
  "VAR-F": true
}
yq -j eval . input.yaml |
  jq  'del(.[] | select(( type == "string" and test("^{{a[.]b[.][^}]*}}$" ))))' > tmp.json
yq -P eval . tmp.json
map_values( select( type == "string" and test("^{{a[.]b[.][^}]*}}$" | not)
VAR-C: v0.0
VAR-D: '{{a.b.VAR-D}}-{{a.b.VAR-A}}'
VAR-E: '{{a.b.VAR-C}}-{{a.b.VAR-B}}-{{a.b.VAR-A}}'
VAR-F: true