Jak połączyć wget i grep

11

Mam adres URL strony HTML i chcę go grepować. Jak mogę to zrobić wget someArgs | grep keyword?

Moim pierwszym pomysłem było wget -q -O - url | grep keyword, ale wyjście wgeta omija grep i pojawia się na terminalu w jego oryginalnej formie.

Jofsey
źródło
grep wybiera linie rozdzielone znakami (np. powrotu karetki i wiersza), odpowiedź HTML nie ma linii z tekstem ze znacznikami takimi jak <br> lub <p>, więc cała strona internetowa może wyglądać jak jedna linia do grep
RedGrittyBrick
1
@RedGrittyBrick Polecenie OP działa dla mnie bezbłędnie.
slhck

Odpowiedzi:

11

Najprostszym sposobem jest skorzystanie curlz opcji -sza cichy:

curl -s http://somepage.com | grep whatever
Marco
źródło
@slhck: Oba polecenia robią dla mnie dokładnie to samo.
Dennis
@Dennis Spróbuj curling http://superuser.com/questions/431581. Z jakiegokolwiek powodu przetestowałem go z tym konkretnym adresem URL i nie otrzymałem danych wyjściowych. Nie wiem czego mi brakuje.
slhck
@slhck: Curl domyślnie nie śledzi przekierowań. Robi to z -Lprzełącznikiem.
Dennis
@Dennis Nie wiedziałem, o czym mówisz, nie widząc usuniętych komentarzy - ale tak, to ma sens. Dzięki za wyjaśnienie.
slhck
1
Pytanie dotyczy wget. Nie zwija się To nie zadziała z wieloma przekierowaniami i opcją -L.
Ligemer,
11

Trzymanie tego ze względu na kompletność.

Twój przykład powinien faktycznie działać. Składnia jest poprawna, a otowget zrzut ekranu, który właśnie zademonstrowałem , ze starym dobrym GNU 1.13.4.

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

Załóż więc, że twój wzór jest nieprawidłowy i greppo prostu wyświetli wszystko, co uzyska.

slhck
źródło
Może to być także literówka w adresie URL. Z -qnie ma komunikatu o błędzie.
Dennis
3

Jeśli szukasz nagłówków grep lub pipe, są one standardowo kierowane do stderr, więc musisz je przekierować. Na przykład:

wget -O - http://example.com/page.php > /dev/null 2>&1 | grep HTTP
ErichBSchulz
źródło
2
To jest właściwy sposób, dzięki!
Udayraj Deshmukh
Zobacz także odpowiedzi tutaj
Suzana,
0

wgetPisze jego wyjście stderr nie stdout, więc trzeba przekierować stderrdo stdout:

wget -q -O - url 2&>1 | grep keyword
vstepaniuk
źródło