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.


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

@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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.