如何批量通过IP地址获取城市信息并输出到标准输出?
问题分析与脚本修正
原脚本存在几个关键问题导致无法正常工作:
curl默认会输出传输进度信息,这就是你看到的大量无关内容,需要用静默模式抑制。- 循环内先把查询结果追加到临时文件,提取城市后立刻清空文件,等于没有保留或输出任何结果。
- 频繁读写临时文件效率低,完全可以通过管道直接处理输出。
修正后的脚本
#!/bin/bash while IFS= read -r ip; do # 静默模式请求IP信息,直接过滤出包含city的行 curl -s "ipinfo.io/$ip" | grep '"city"' done < ip.txt
额外优化建议
如果需要更精准处理JSON格式的输出(比如确保格式严格匹配需求、处理查询失败的情况),可以用jq工具(需提前安装):
#!/bin/bash while IFS= read -r ip; do curl -s "ipinfo.io/$ip" | jq '{"city": .city}' done < ip.txt
这个版本输出的格式更标准,遇到无效IP时会返回null而非混乱内容。
关键修改点说明
- 添加
curl -s参数:禁用进度条和冗余传输信息,消除无关输出。 - 移除临时文件
test.txt:通过管道直接传递curl输出给过滤工具,避免无意义的文件读写。 - 用
grep '"city"'替代sed操作:更直接匹配目标行,简化逻辑。
内容的提问来源于stack exchange,提问作者Lib
相关产品推荐
相关产品推荐

