regex - 使用 yq/sed/grep 提取与 YAML 中的正则表达式匹配的键值对
问题描述
我在 YAML 输入下面有这个,我正在尝试使用yq
输入:
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: '{{a.b.VAR-F}}'
预期输出:
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}}'
我的尝试:
yq eval 'del( .[] | select (. == "{{a.b.*" ) )' abc.yaml
我是新手yq
,任何帮助将不胜感激。
基于@Inian 的评论
**注意:我想删除值 {{abVAR-A}} (在 ab 之后)中的键名(VAR-A)匹配的对,并且如果我的值中有多个由 - 分隔的 {{abVAR-A}} ,我想保留它们
解决方案
这是你所期望的吗?
yq eval 'del(.[] | select(sub("^{{a\.b\.[^}]+}}$","")=="" ))' abc.yaml
正则表达式^{{a\.b\.[^}]+}}$
匹配单个 {{...}} 结构,因为^
和$
在开头和结尾。[^}]
表示不是 的任何字符}
。
然后用空字符串替换,如果结果又是空字符串,则选择删除。
如果您只想匹配{{a.b.VAR-A}}
:
yq eval 'del(.[] | select(sub("^{{a\.b\.VAR-A}}$","")=="" ))' abc.yaml
推荐阅读
- youtube - 通过使用订单“日期”,无法使用 YouTube 数据 API v3 获得正确的 YouTube 搜索结果
- java - java.io.IOException:无法将 RPC 6769565832902301993 发送到 /10.128.226.240:45541:java.lang.AbstractMethodError
- r - 具有随机截距和随机斜率的重复测量模型
- c# - WPF 自定义文本框 UserControl 扩展 .NetCore
- mongodb - 在 ubuntu 中将 .zip 文件导入 mongoDB
- javascript - window.location.reload() 只刷新主页,为什么不刷新专门使用angular的其他页面?
- javascript - FFmpeg 将视频结果流式传输到 net::ERR_CONTENT_LENGTH_MISMATCH 206
- graphviz - 有没有办法让边长从节点的边界开始?
- ruby - 如何将嵌套数组转换为一维?
- reactjs - useCallback 钩子:依赖变量的行为与 2 声明方法不同