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

jq如何在未知键名场景下过滤内层数组的正则匹配值

问题场景

给定如下JSON结构的磁盘设备映射数据:

{
  "ids": {
    "sda": [
      "scsi-0QEMU_QEMU_HARDDISK_drive-scsi2"
    ],
    "sdb": [
      "scsi-0QEMU_QEMU_HARDDISK_drive-scsi0"
    ],
    "sdb1": [
      "lvm-pv-uuid-lvld3A-oA4k-hC19-DXzv-D0Fq-xyME-BwgJid",
      "scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part1"
    ],
    "sdc": [
      "lvm-pv-uuid-pWes2W-dgYF-l8hG-La48-9ozH-hPdU-MOkOtf",
      "scsi-0QEMU_QEMU_HARDDISK_drive-scsi1"
    ]
  }
}

需求规则:

  • 遍历ids对象下所有键对应的内层数组
  • 查找数组内存在匹配正则.*scsi0$的条目
  • 返回该数组对应的上层键名,预期输出结果为sdb
jq实现方案

使用如下jq命令即可完成匹配查询:

jq -r '.ids | to_entries[] | select(any(.value[]; test(".*scsi0$"))) | .key' 你的数据文件路径

语句逻辑说明:

  • 首先定位到JSON中的ids节点
  • 通过to_entries将键值对对象转换为{key: 设备名, value: 对应设备别名数组}的条目列表
  • 用select搭配any筛选出数组中至少有一个元素匹配目标正则的条目
  • 最终输出符合条件条目的key字段,就是目标设备名

执行命令后会直接返回预期结果:

sdb

内容的提问来源于stack exchange,提问作者Stefan Lipinski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:33:34