Преобразование многострочного вывода cURL в одинарную строку, разделенную точкой с запятой

Я использую curl -s -I -L example.com | grep 'HTTP \ | Location' для отслеживания перенаправления заданного 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 \ | Местоположение' | 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;

Буду признателен за любые идеи. Спасибо.

0
08.12.2016, 09:42
2 ответа

Протокол 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;
1
28.01.2020, 02:47

Вы также можете использовать аргумент -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=...
1
28.01.2020, 02:47

Теги

Похожие вопросы