下面是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"
]
}
}
字符串
我想实现的是在内部数组的值中搜索.*scsi0$
,并得到sdb
作为结果。
2条答案
按热度按时间c2e8gylq1#
使用JSON jq
endswith
过滤结果:字符串
结果:
型
点击这里:https://jqplay.org/s/DAhKosXXgiA
让我们打破它下来...
首先获取
.ids
,它返回:型
.然后将结果传递给to_entries函数,将其转换为
{key, value}
对象数组。.ids | to_entries
返回:型
. next stream使用迭代器运算符
.[]
来处理对象列表。.ids | to_entries[]
返回:型
.并从值流中选择,
.ids | to_entries[] | select(.value[])
,其中值以“scsi0”结束,select(.value[] | endswith("scsi0"))
:型
最后,得到键值。
.ids | to_entries[] | select(.value[] | endswith("scsi0")) | .key
返回:型
命令行:
型
点击这里:https://jqplay.org/s/DAhKosXXgiA
yqyhoc1h2#
字符串
如果数组中的 any 值与您的正则表达式匹配,则将打印该键。
如果没有匹配,则不会有输出。
to_entries
用于轻松捕获对象的密钥。select
过滤值.value[] | test(".*scsi0$")
检查regex的每个值.key
,我们给出结果的关键字Try it online