使用yq删除键名匹配正则表达式的JSON条目
解决go版yq删除指定前缀键名的问题
问题场景
现有JSON数据:
{ "sha256key": [ "438143050f234146300c44ed7e22be698e1e3c8c6bbc89b5c7e6276e8250a3a7" ], "validkey": [ "77989d8d29d044112026eae94fe27e9df9ae29d9987d38bcdf470100175def76", "3c91a35a4e12eb89c8f25381f29438f270e9b0af1ef0cbcd416581cd7fe06a0e" ] }
需要删除所有键名以sha256开头的条目,得到仅保留validkey的结果。
错误命令分析
你之前使用的yq 'del(select(.key | test("^sha256."))'存在三个问题:
- 语法不完整:末尾缺少闭合括号,导致命令无法被解析执行
- 键名获取错误:go版yq遍历对象条目时,需用
key而非.key来获取当前键名 - 正则冗余:
^sha256.中的.是多余的,仅需^sha256就能匹配以该字符串开头的键
正确命令
执行以下命令即可实现需求:
yq 'del(.[] | select(key | test("^sha256")))' input.json
若需要直接修改原文件,添加-i参数:
yq -i 'del(.[] | select(key | test("^sha256")))' input.json
命令解释
.[]:遍历顶层对象的所有条目select(key | test("^sha256")):筛选出键名以sha256开头的条目del(...):删除筛选出的目标条目
执行后将得到预期结果:
{ "validkey": [ "77989d8d29d044112026eae94fe27e9df9ae29d9987d38bcdf470100175def76", "3c91a35a4e12eb89c8f25381f29438f270e9b0af1ef0cbcd416581cd7fe06a0e" ] }
内容的提问来源于stack exchange,提问作者JoyceLee
相关产品推荐
相关产品推荐

