You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:52:46