如何使用jq实现同个键匹配多个值的JSON数据筛选
jq多值匹配select语句解决方案
方法1:直接使用逻辑或运算符(适合少量匹配值)
直接在select条件里用or连接多个等值判断即可,完整命令如下:
system_profiler -json SPPCIDataType | jq -r '.SPPCIDataType[] | select(.sppci_device_type == "sppci_audiodevice" or .sppci_device_type == "sppci_nvme")._name'
执行后会输出3条匹配结果:
pci1002,aaf0 pci144d,a808 pci144d,a808
方法2:使用IN内置函数(适合多匹配值场景)
如果需要匹配的目标值数量较多,重复写or语句冗余,可以用jq的IN函数,把所有待匹配的值作为参数传入,写法更简洁易维护:
system_profiler -json SPPCIDataType | jq -r '.SPPCIDataType[] | select(.sppci_device_type | IN("sppci_audiodevice", "sppci_nvme"))._name'
兼容老版本jq的替代写法
如果你的jq版本低于1.6不支持IN函数,可以用index方法实现相同效果:
system_profiler -json SPPCIDataType | jq -r '.SPPCIDataType[] | select( ["sppci_audiodevice", "sppci_nvme"] | index(.sppci_device_type) )._name'
内容的提问来源于stack exchange,提问作者Floren
相关产品推荐
相关产品推荐

