如何从文本文件存储的URL批量获取JSON数据 解决curl格式报错问题
问题根因
这个报错通常由以下3个原因导致:
- 存储URL的TXT文件是Windows下编辑的,自带
\r换行符,被读入变量后导致URL格式非法 - 调用curl时变量没有加双引号,URL如果包含特殊字符会被shell拆分为多个参数
- URL行首尾存在多余的空格、制表符等不可见空白字符
修复步骤
1. 清理URL文件的特殊字符
执行以下命令处理test001.txt,移除Windows换行符和行首尾空白:
# 通用方案,无需额外安装工具 sed -i 's/\r$//;s/^[[:space:]]*//;s/[[:space:]]*$//' test001.txt # 已安装dos2unix的用户也可以用下面的命令先转换换行符 # dos2unix test001.txt
2. 修改shell脚本规避语法问题
调整后的脚本如下,兼容更多边缘场景:
#!/usr/bin/bash while IFS= read -r line || [[ -n $line ]]; do curl -H "User-agent: 'your bot 0.1'" "$line" | jq done < test001.txt
修改点说明:
- 读取行时指定
IFS=,避免read自动丢弃行首尾的合法字符 - 给变量
$line包裹双引号,避免shell对URL做分词处理 - 增加
|| [[ -n $line ]]判断,避免文件最后一行无换行符时被漏处理
可选优化
如果需要把每个URL的解析结果存储为单独的文件,避免输出混在一起,可以将curl行修改为:
curl -H "User-agent: 'your bot 0.1'" "$line" | jq > "$(md5sum <<< "$line" | awk '{print $1}').json"
用URL的MD5值作为文件名,避免URL包含特殊字符导致文件名非法。
内容的提问来源于stack exchange,提问作者lurking_soul
相关产品推荐
相关产品推荐

