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

如何为curl+jq过滤命令添加OS字段的包含匹配条件?

问题:为curl+jq命令添加基于contains的OS字段包含过滤

我当前使用以下curl+jq命令可正常执行,现在需要新增一个过滤条件——用contains包含匹配的方式,筛选出OS字段包含指定字符串的设备:

curl -H "Accept: application/json; indent=4" -H "Authorization: Token $token" "$url_devices" -k | jq -r --arg device "$device" '.results[] | select(.cluster.name == $cluster) | .primary_ip.address'

我尝试了精确匹配的写法,但无法正常工作:

curl -H "Accept: application/json; indent=4" -H "Authorization: Token $token" "$url_devices" -k | jq -r --arg device "$device" '.results[] | select(.cluster.name == $cluster AND .cluster.os == $os) | .primary_ip.address'


解决方案

要实现包含匹配,需要将精确匹配的逻辑替换为jq的contains()函数,同时修正变量传递和语法问题:

基础包含匹配命令

curl -H "Accept: application/json; indent=4" -H "Authorization: Token $token" "$url_devices" -k | jq -r --arg cluster "$cluster" --arg os "$os" '.results[] | select(.cluster.name == $cluster and .cluster.os | contains($os)) | .primary_ip.address'

关键修改点:

  • 补充--arg cluster "$cluster"和--arg os "$os"参数,确保jq能正确获取这两个外部变量(原命令遗漏了这两个参数的传递)
  • 将.cluster.os == $os改为.cluster.os | contains($os),实现判断.cluster.os字段是否包含$os变量指定的字符串
  • jq标准逻辑与使用小写and,而非大写AND

可选:忽略大小写的包含匹配

如果需要忽略OS字符串的大小写差异,可以用ascii_downcase统一转换为小写后再匹配:

curl -H "Accept: application/json; indent=4" -H "Authorization: Token $token" "$url_devices" -k | jq -r --arg cluster "$cluster" --arg os "$os" '.results[] | select(.cluster.name == $cluster and (.cluster.os | ascii_downcase) | contains($os | ascii_downcase)) | .primary_ip.address'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:15:03