如何用grep/awk提取JSON指定项index值并整合到curl脚本
实现从JSON接口提取指定条目index值的Shell脚本方案
需求说明
从getsubtitlemenulist接口返回的JSON数据中,提取name为"Inne"的条目对应的index值,将其赋值给变量$NUMER,并传入后续的curl请求。环境仅支持grep、awk等基础命令,无法使用jq、Python工具。
接口返回JSON示例
{"success":true,"msg":"","file_path":"","subtitle_list":[{"name":"Wył.","index":0,"selected":false},{"name":"1/21 Duński","index":1,"selected":false},{"name":"2/21 Niemiecki","index":2,"selected":false},{"name":"3/21 Angielski","index":3,"selected":false},{"name":"4/21 Hiszpański","index":4,"selected":false},{"name":"5/21 Francuski","index":5,"selected":false},{"name":"6/21 Włoski","index":6,"selected":false},{"name":"7/21 Niderlandzki","index":7,"selected":false},{"name":"8/21 Norweski","index":8,"selected":false},{"name":"9/21 Fiński","index":9,"selected":false},{"name":"10/21 Szwecki","index":10,"selected":false},{"name":"11/21 Angielski","index":11,"selected":false},{"name":"12/21 Niemiecki","index":12,"selected":false},{"name":"13/21 Angielski","index":13,"selected":false},{"name":"14/21 Hiszpański","index":14,"selected":false},{"name":"15/21 Francuski","index":15,"selected":false},{"name":"16/21 Włoski","index":16,"selected":false},{"name":"17/21 Niemiecki","index":17,"selected":false},{"name":"18/21 Hiszpański","index":18,"selected":false},{"name":"19/21 Francuski","index":19,"selected":false},{"name":"20/21 Włoski","index":20,"selected":false},{"name":"Inne","index":21,"selected":true}]}
实现方案
利用grep定位目标条目,再用awk提取对应index值:
- 用
grep -o精准匹配包含"name":"Inne"的整条对象内容,避免跨条目误匹配 - 两次使用awk分割字符串,提取出
index后的纯数字值
核心命令组合:
curl -s "$ip/getsubtitlemenulist?" | grep -o '{"name":"Inne","index":[0-9]*,"selected":[a-z]*}' | awk -F'"index":' '{print $2}' | awk -F',' '{print $1}'
完整脚本
#!/bin/bash # 调用接口并提取目标index值 NUMER=$(curl -s "$ip/getsubtitlemenulist?" | grep -o '{"name":"Inne","index":[0-9]*,"selected":[a-z]*}' | awk -F'"index":' '{print $2}' | awk -F',' '{print $1}') # 确认获取到值后执行后续请求 if [ -n "$NUMER" ]; then curl "$ip/setsubttmenulist?%7B%22cur_index%22%3A$NUMER%7D" fi
细节说明
- curl添加
-s参数,屏蔽进度输出避免干扰结果 - 两次awk分别完成
index字段的拆分和后续冗余内容的剔除 - 增加
$NUMER非空判断,确保仅在成功提取到有效值时触发后续请求
内容的提问来源于stack exchange,提问作者jasko887
相关产品推荐
相关产品推荐

