Як поєднувати wget і grep


11

У мене є URL-адреса на html-сторінці, і я хочу її отримати. Як я можу це зробити wget someArgs | grep keyword?

Моя перша ідея була wget -q -O - url | grep keyword, але вихід Wget обходить grep і виникає на терміналі в оригінальному вигляді.


grep вибирає рядки, обмежені (наприклад, символами повернення каретки та символами передачі рядків), у відповіді HTML немає рядків, у яких є текст з розміткою, як <br> або <p>, так що вся веб-сторінка може виглядати як один рядок, щоб
підкреслити

1
@RedGrittyBrick Команда OP працює для мене бездоганно.
slhck

Відповіді:


11

Найпростіший спосіб - це використовувати curlпараметр -sдля беззвучного:

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

@slhck: Обидві команди для мене роблять точно так само.
Денніс

@Денніс Спробуйте curlінж http://superuser.com/questions/431581. З будь-якої причини я перевірив його саме з цією URL-адресою і не отримав жодного результату. Не знаю, чого мені не вистачає.
slhck

@slhck: Curl не переслідує переспрямування за замовчуванням. Це робиться з -Lвимикачем.
Денніс

@Dennis Не знав, про що ти говориш, не бачивши видалених коментарів - але так, це має сенс. Дякуємо, що очистили його.
slhck

1
Питання задає wget. Не завивати. Це не працюватиме з кількома переадресаціями та опцією -L.
Лігемер

11

Збереження цього заради повноти.

Ваш приклад насправді повинен працювати. Синтаксис правильний, і ось скріншот, який я щойно демонстрував , зі старим хорошим GNU wget1.13.4.

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

Тож припускайте, що ваш шаблон неправильний, і він grepбуде просто виводити все, що він отримав.


Це також може бути помилковою помилкою в URL-адресі. З -q, повідомлення про помилку немає.
Денніс


3

Якщо ви хочете зафіксувати заголовки або труби, вони стандартно спрямовані на stderr, тому вам потрібно перенаправити їх. Наприклад:

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

2
Це правильний спосіб зробити це, дякую!
Удайрай Дешмух

Дивіться також відповіді тут
Сузана,

0

Запис wgetзаписує на stderr не stdout, тому потрібно перенаправляти stderrна stdout:

wget -q -O - url 2&>1 | grep keyword
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.