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

如何批量通过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而非混乱内容。

关键修改点说明

  1. 添加curl -s参数:禁用进度条和冗余传输信息,消除无关输出。
  2. 移除临时文件test.txt:通过管道直接传递curl输出给过滤工具,避免无意义的文件读写。
  3. 用grep '"city"'替代sed操作:更直接匹配目标行,简化逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:20:24