如何解析curl下载的JSON文件提取双引号内的所有IP地址
适配需求的解析方案
注意事项
你原来的命令里加了-o 'ip.json'参数,会把curl返回的内容写入本地文件,不会输出到管道,所以需要根据是否要保存本地文件选择对应用法。
方案1:不保存本地文件,直接提取IP
curl -L "https://sample.data.com/ip.json" | jq -r '.[][] | .[]'
方案2:保存本地文件同时提取IP
curl -L "https://sample.data.com/ip.json" | tee ip.json | jq -r '.[][] | .[]'
方案3:已提前下载文件,直接读取本地文件提取
jq -r '.[][] | .[]' ip.json
命令说明
-r参数:输出原始字符串,自动移除JSON值的双引号,直接得到纯IP/CIDR内容- 第一组
[]:自动遍历根节点下所有sample1到sample300的属性值,不需要手动枚举所有键名 - 第二组
[]:自动遍历每个sample块下的所有子属性(不管是echo、delta、beta还是其他自定义名称)的取值 - 最后的
.[]:展开子属性对应的数组,输出里面存储的IP地址段
可选:新增IP格式校验
如果JSON里可能混杂非IP内容,可以加正则过滤,只输出符合格式的内容:
curl -L "https://sample.data.com/ip.json" | jq -r '.[][] | .[] | select(test("^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+(/[0-9]+)?$"))'
内容的提问来源于stack exchange,提问作者hammer89
相关产品推荐
相关产品推荐

