将 cURL 多行输出转换为以分号分隔的单行

将 cURL 多行输出转换为以分号分隔的单行

我用来curl -s -I -L example.com | grep 'HTTP\|Location'跟踪给定 URL 的重定向,该 URL 提供多行输出。

$ curl -s -I -L google.com | grep 'HTTP\|Location'
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
HTTP/1.1 200 OK

我想连接输出的每一行并用分号分隔。

HTTP/1.1 301 Moved Permanently;Location: http://www.google.com/;HTTP/1.1 200 OK;

我已经尝试过curl -s -I -L google.com | grep 'HTTP\|Location' | tr '\n' ';' > file,但这只能替换\n并且;不会连接行。

$ curl -s -I -L google.com | grep 'HTTP\|Location' | tr '\n' ';' > file    
$ cat file
HTTP/1.1 301 Moved Permanently;
Location: http://www.google.com/;
HTTP/1.1 200 OK;

如有任何想法,将不胜感激。谢谢。

答案1

HTTP 协议要求标头行以 CR LF ( \r\n) 结尾;您必须删除其中一个并将另一个转换为换行符:

$ curl -s -I -L google.com | grep 'HTTP\|Location' | tr -d '\r' | tr '\n' ';'
HTTP/1.1 302 Found;Location: http://www.google.eu/?gws_rd=cr&ei=Hx1JWIDpGordvATO65S4BQ;HTTP/1.1 200 OK;

答案2

您还可以使用-w参数curl

> curl -fs -w "%{response_code},%{redirect_url}\n" -o /dev/null http://google.com
302,http://www.google.de/?gfe_rd=cr&ei=...

相关内容