Como combinar wget e grep

11

Eu tenho um URL de página html e quero cumprimentá-lo. Como posso fazer isso wget someArgs | grep keyword?

Minha primeira idéia foi wget -q -O - url | grep keyword, mas a saída do wget ignora o grep e surge no terminal em sua forma original.

Jofsey
fonte
grep seleciona linhas delimitadas por (por exemplo) retorno de carro e caracteres de avanço de linha, uma resposta HTML não possui linhas com texto com marcação como <br> ou <p>, para que toda a página da Web pareça uma linha para grep
RedGrittyBrick
11
@RedGrittyBrick O comando do OP funciona perfeitamente para mim.
slhck

Respostas:

11

A maneira mais fácil é usar curlcom a opção -sde silêncio:

curl -s http://somepage.com | grep whatever
Marco
fonte
@ Sllck: Ambos os comandos fazem exatamente o mesmo por mim.
Dennis
@ Dennis Tentando curling http://superuser.com/questions/431581. Por qualquer motivo, testei-o com esse URL em particular e não obtive saída. Não sei o que estou perdendo.
slhck
@slhck: o Curl não segue os redirecionamentos por padrão. Isso acontece com o -Linterruptor.
Dennis
@Dennis Não sabia do que estava falando sem ver os comentários excluídos - mas sim, isso faz sentido. Obrigado por esclarecer.
slhck
11
A pergunta pede pelo wget. Não enrolar. Isso não funcionará com vários redirecionamentos e a opção -L.
Ligemer
11

Manter isso por uma questão de integridade.

Seu exemplo deve realmente funcionar. A sintaxe está correta, e aqui está um screencast que acabei de demonstrar , com um bom e velho GNU wget1.13.4.

wget -q some-url -O - | grep something

Portanto, assuma que seu padrão está errado e grepapenas produzirá tudo o que tem.

slhck
fonte
Também pode ser um erro de digitação no URL. Com -q, não há mensagem de erro.
Dennis
3

Este bug foi corrigido na v1.12.1 em outra versão . Atualmente eu uso a v1.15 e funciona conforme o esperado.

Leben Gleben
fonte
3

Se você estiver procurando grep ou encabeçar cabeçalhos, eles são direcionados padrão ao stderr, então você precisa redirecioná-los. Por exemplo:

wget -O - http://example.com/page.php > /dev/null 2>&1 | grep HTTP
ErichBSchulz
fonte
2
Esta é a maneira correta de fazê-lo, obrigado!
Udayraj Deshmukh 23/03
Veja também as respostas aqui
Suzana
0

Ele wgetgrava sua saída em stderr não stdout, então é necessário redirecionar o stderrpara stdout:

wget -q -O - url 2&>1 | grep keyword
vstepaniuk
fonte