Converta a saída de várias linhas cURL em uma linha separada por um ponto e vírgula

0

Estou usando curl -s -I -L example.com | grep 'HTTP\|Location' para rastrear redirecionamentos de uma determinada URL, o que gera uma saída de várias linhas.

$ 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

Eu quero concatenar cada linha da saída e separá-la com um ponto e vírgula.

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

Eu tentei curl -s -I -L google.com | grep 'HTTP\|Location' | tr '\n' ';' > file , mas isso só substitui \n por ; e não concatena as linhas.

$ 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;

Ficaria grato por qualquer ideia. Obrigado.

    
por tech-otaku 08.12.2016 / 08:42

2 respostas

1

O protocolo HTTP requer que as linhas de cabeçalho terminem com CR LF ( \r\n ); você deve excluir um deles e traduzir o outro para uma nova linha:

$ 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;
    
por 08.12.2016 / 09:44
0

Você também pode usar o argumento -w para curl :

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

Tags