Wie man wget und grep kombiniert

11

Ich habe eine HTML-Seite URL und ich möchte es grep. Wie kann ich das machen wget someArgs | grep keyword?

Meine erste Idee war wget -q -O - url | grep keyword, aber die Ausgabe von wget umgeht grep und entsteht auf dem Terminal in seiner ursprünglichen Form.

Jofsey
quelle
grep wählt Zeilen aus, die durch (z. B. Wagenrücklauf- und Zeilenvorschubzeichen) begrenzt sind. Eine HTML-Antwort enthält keine Zeilen mit Text mit Markup wie <br> oder <p>, sodass die gesamte Webseite für grep wie eine Zeile aussehen kann
RedGrittyBrick
1
@RedGrittyBrick Der Befehl des OP funktioniert bei mir einwandfrei.
Slhck

Antworten:

11

Am einfachsten ist es, curldie Option -sfür stumm zu verwenden:

curl -s http://somepage.com | grep whatever
Marco
quelle
@slhck: Beide Befehle machen für mich genau das Gleiche.
Dennis
@ Tennis Versuchen curlSie es http://superuser.com/questions/431581. Aus irgendeinem Grund habe ich es mit dieser bestimmten URL getestet und keine Ausgabe erhalten. Keine Ahnung, was ich vermisse.
Slhck
@slhck: Curl folgt standardmäßig nicht den Weiterleitungen. Es geht mit dem -LSchalter.
Dennis
@ Tennis Wusste nicht, wovon du sprichst, ohne die gelöschten Kommentare zu sehen - aber ja, das macht Sinn. Danke, dass du es geklärt hast.
Slhck
1
Frage fragt nach wget. Nicht kräuseln. Dies funktioniert nicht mit mehreren Weiterleitungen und der Option -L.
Ligemer
11

Der Vollständigkeit halber behalten Sie dies bei.

Ihr Beispiel sollte tatsächlich funktionieren. Die Syntax ist korrekt, und hier ist ein Screencast, den ich gerade mit einer guten alten GNU wget1.13.4 demonstriert habe.

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

Nehmen wir also an, Ihr Muster ist falsch und grepgibt einfach alles aus, was es hat.

slhck
quelle
Es könnte auch ein Tippfehler in der URL sein. Mit -qgibt es keine Fehlermeldung.
Dennis
3

Wenn Sie nach Grep- oder Pipe-Headern suchen, sind diese standardmäßig an stderr gerichtet, sodass Sie sie umleiten müssen. Z.B:

wget -O - http://example.com/page.php > /dev/null 2>&1 | grep HTTP
ErichBSchulz
quelle
2
Dies ist der richtige Weg, danke!
Udayraj Deshmukh
Siehe auch die Antworten hier
Suzana
0

Das wgetschreibt seine Ausgabe auf stderr nicht zu stdout, also muss man das umleiten stderrzu stdout:

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