Como ecoar somente a primeira linha da saída do comando 'curl'?

2

Estou tentando obter apenas a primeira linha da saída do comando curl . (Desculpe se isso é confuso)

Digamos que, para uma instância, eu corra simplesmente:

# curl http://localhost
<!-- This is the hidden line i want to grab. -->
<!DOCTYPE html>
<html>
<head>
..
..

O que fazer se eu quiser a primeira linha da saída aqui, que é:

<!-- This is the hidden line i want to grab. -->

Eu tentei coisas assim, mas ainda não tive sorte:

# curl http://localhost | head -n 1
# curl http://localhost | sed -n '1!p'

.. etc Tudo me dá saídas de lixo, assim:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0<!-- This is the hidden line i want to grab. -->
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (23) Failed writing body (173 != 1763)

Não é o resultado esperado conforme mencionado acima:

<!-- This is the hidden line i want to grab. -->

Qualquer especialista aqui por favor = (

    
por 夏期劇場 19.02.2016 / 12:19

1 resposta

4

Esta assim chamada saída de lixo é basicamente um medidor de progresso durante a operação de baixar os dados. Você pode basicamente ignorar isso, já que é por padrão entrar no fluxo de erro padrão que é ignorado, Assim, somente a parte relevante é impressa na saída padrão .

Aqui está o teste:

$ curl http://example.com/ | head -n1 > example.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1270  100  1270    0     0   112k      0 --:--:-- --:--:-- --:--:--  124k
(23) Failed writing body
$ cat example.html 
<!doctype html>

Se você ainda quiser silenciá-lo, adicione o parâmetro -s para o modo silencioso ou redirecione o fluxo de erro padrão para /dev/null , por exemplo:

$ curl -s http://example.com/ 2> /dev/null | head -n1
<!doctype html>

Ou usando a substituição de comandos:

head -n1 <(curl -s http://example.com/ 2> /dev/null)
    
por 19.02.2016 / 12:46