curl:(3)在URL中找到非法字符

Mis*_*ill 10 curl cat ip-geolocation

我想在ipinfo.io上批量查找ip详细信息.这是我的代码. $ cat ips.txt | xargs -I% curl http://ipinfo.io/%/region

文件"ips.txt"在单独的行中包含三个ip地址:(1)8.8.8.8(2)8.8.4.4(3)1.2.3.4

这只解析了最后一个ip地址.它应该给(1)加利福尼亚(2)科罗拉多(3)华盛顿.我得到以下内容:

curl:(3)URL curl中发现的非法字符:(3)URL Washington中发现的非法字符

如果我只用一个ip地址编写ips.txt(例如8.8.8.8),我会得到很好的结果.我认为我的文本文件或我使用cat的方式有问题.你能帮我清理我的代码,以便解决所有三个IP地址吗?

根据请求,这里是我的设置的详细信息.

$ uname -a
CYGWIN_NT-10.0 OFFICECOMP 2.3.1(0.291/5/3) 2015-11-14 12:44 x86_64 Cygwin
$ curl -V
curl 7.45.0 (x86_64-unknown-cygwin) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 lib idn/1.29 libssh2/1.5.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: Debug IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets Metali
Run Code Online (Sandbox Code Playgroud)

cla*_*123 20

总而言之,作为未来参考的一步一步,

运行uname -A可以揭示正在使用的系统,例如在这里显示它是Cygwin.

这导致我们考虑Windows与Linux的差异.

已知的差异之一是窗口/ dos线路结尾.这可以通过以下方式显示,以及通常检查文本文件的所有内容:

cat -A ips.txt
Run Code Online (Sandbox Code Playgroud)

现在,如果你发现它包含^M行结尾,就像它在这里所做的那样,它意味着行结尾是dos/windows而不是*nix行结尾(它只显示以行结尾的行$)

要解决此问题,只需运行即可

dos2unix ips.txt
Run Code Online (Sandbox Code Playgroud)

现在,如果你使用这个固定的输入文件运行你的原始命令,似乎CURL对它很满意并且它有效.

非常感谢MistaGill,我ipinfo.io从这篇文章中了解到了这一点.