Comment combiner wget et grep


11

J'ai une URL de page html et je veux la grep. Comment puis-je le faire wget someArgs | grep keyword?

Ma première idée était wget -q -O - url | grep keyword, mais la sortie de wget contourne grep et se pose sur le terminal dans sa forme d'origine.


grep sélectionne des lignes délimitées (par exemple) par des caractères de retour chariot et de saut de ligne, une réponse HTML n'a pas de lignes contenant du texte avec un balisage comme <br> ou <p> de sorte que toute la page Web puisse ressembler à une ligne à grep
RedGrittyBrick

1
@RedGrittyBrick La commande du PO fonctionne parfaitement pour moi.
slhck

Réponses:


11

Le moyen le plus simple consiste à utiliser curll'option -sde silence:

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

@slhck: Les deux commandes font exactement la même chose pour moi.
Dennis

@Dennis Essayer curling http://superuser.com/questions/431581. Pour une raison quelconque, je l'ai testé avec cette URL particulière et je n'ai obtenu aucune sortie. Je ne sais pas ce qui me manque.
slhck

@slhck: Curl ne suit pas les redirections par défaut. Il le fait avec le -Lcommutateur.
Dennis

@Dennis Je ne savais pas de quoi vous parliez sans voir les commentaires supprimés - mais oui, cela a du sens. Merci de l'avoir éclairci.
slhck

1
La question demande wget. Pas bouclé. Cela ne fonctionnera pas avec plusieurs redirections et l'option -L.
Ligemer

11

Garder cela dans un souci d'exhaustivité.

Votre exemple devrait réellement fonctionner. La syntaxe est correcte, et voici un screencast que je viens de prendre pour le démontrer , avec un bon vieux GNU wget1.13.4.

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

Supposez donc que votre modèle est incorrect et qu'il grepproduira simplement tout ce qu'il a.


Il peut également s'agir d'une faute de frappe dans l'URL. Avec -q, il n'y a pas de message d'erreur.
Dennis


3

Si vous cherchez des en-têtes grep ou pipe, ils sont dirigés par défaut vers stderr, vous devez donc les rediriger. Par exemple:

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

2
C'est la bonne façon de procéder, merci!
Udayraj Deshmukh

Voir aussi les réponses ici
Suzana

0

Le wgetécrit sa sortie dans stderr not to stdout, il faut donc rediriger le stderrvers stdout:

wget -q -O - url 2&>1 | grep keyword
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.