Come combinare wget e grep


11

Ho un URL html-page e voglio grep. Come posso farlo wget someArgs | grep keyword?

La mia prima idea è stata wget -q -O - url | grep keyword, ma l'output di wget ignora grep e si presenta sul terminale nella sua forma originale.


grep seleziona le linee delimitate da (ad es.) caratteri di ritorno a capo e di avanzamento riga, una risposta HTML non ha righe con testo con markup come <br> o <p>, quindi l'intera pagina web potrebbe apparire come una riga da grep
RedGrittyBrick

1
@RedGrittyBrick Il comando dell'OP funziona perfettamente per me.
slhck,

Risposte:


11

Il modo più semplice è quello di utilizzare curlcon l'opzione -sper il silenzio:

curl -s http://somepage.com | grep whatever

@slhck: entrambi i comandi fanno esattamente lo stesso per me.
Dennis,

@Dennis Prova l' curling http://superuser.com/questions/431581. Per qualsiasi motivo l'ho provato con questo particolare URL e non ho ottenuto alcun risultato. Non so cosa mi manchi.
slhck,

@slhck: Curl non segue i reindirizzamenti per impostazione predefinita. Lo fa con l' -Linterruttore.
Dennis,

@Dennis Non sapevo di cosa stavi parlando senza vedere i commenti cancellati - ma sì, ha senso. Grazie per averlo chiarito.
slhck

1
La domanda chiede wget. Non arricciare. Questo non funzionerà con più reindirizzamenti e l'opzione -L.
Ligemer,

11

Tenendolo presente per motivi di completezza.

Il tuo esempio dovrebbe effettivamente funzionare. La sintassi è corretta, ed ecco uno screencast che ho appena preso per dimostrarlo , con un buon vecchio GNU wget1.13.4.

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

Quindi supponi che il tuo modello sia sbagliato e grepche restituisca tutto ciò che ha ottenuto.


Potrebbe anche essere un refuso nell'URL. Con -q, non è presente alcun messaggio di errore.
Dennis


3

Se stai cercando grep o pipe header, sono standard diretti a stderr, quindi devi reindirizzarli. Per esempio:

wget -O - http://example.com/page.php > /dev/null 2>&1 | grep HTTP

2
Questo è il modo corretto di farlo, grazie!
Udayraj Deshmukh,

Vedi anche le risposte qui
Suzana,

0

L' wgetscrive il suo output a stderr non stdout, quindi bisogna reindirizzare la stderra stdout:

wget -q -O - url 2&>1 | grep keyword
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.