Очистка данных с помощью wget и regex - PullRequest
4 голосов
/ 09 сентября 2011

Я только учусь писать сценарии на bash, я пытался собрать некоторые данные с сайта, в основном из Википедии. Это то, что я сейчас пытаюсь из командной строки, но результат не возвращается

wget -qO- http://en.wiktionary.org/wiki/robust | egrep '<ol>{[a-zA-Z]*[0-9]*}*</ol>'

Я пытаюсь получить данные между тегами, просто хочу, чтобы они отображались. Не могли бы вы помочь мне выяснить, что я делаю не так?

Спасибо

Ответы [ 3 ]

4 голосов
/ 09 сентября 2011

вам нужно отправить вывод на стандартный вывод:

wget -q http://en.wiktionary.org/wiki/robust -q -O - | ...

чтобы получить все <ol> теги с помощью grep, вы можете сделать:

wget -q http://en.wiktionary.org/wiki/robust -O - | tr '\n' ' ' | grep -o '<ol>.*</ol>'
2 голосов
/ 09 сентября 2011

По крайней мере, вам нужно

  • активировать регулярные выражения, добавив переключатель -e.
  • отправляет вывод из wget на стандартный вывод вместо диска, добавив параметр -O -

Честно говоря, я бы сказал, что grep - неподходящий инструмент для этой задачи, поскольку grep работает отдельно для каждой строки, а ваше выражение растягивается на несколько строк.

Я думаю, sed или awk лучше подойдут для этой задачи.

С sed это будет выглядеть как

wget -O - -q http://en.wiktionary.org/wiki/robust | sed -n "/<ol>/,/<\/ol>/p"

Если вы хотите избавиться от лишних <ol> и </ol>, вы можете добавить

... | grep -v -E "</?ol>"

Ссылки по теме

1 голос
/ 02 марта 2014

Если я правильно понимаю вопрос, то цель состоит в том, чтобы извлечь видимый текст изнутри ol-разделов.Я бы сделал это следующим образом:

wget -qO- http://en.wiktionary.org/wiki/robust | 
  hxnormalize -x | 
  hxselect "ol" | 
  lynx -stdin -dump -nolist

[source: "Использование оболочки Linux для веб-очистки"] *

hxnormalize предварительно обрабатывает HTML-код для hxselect, который применяетсяCSS селектор "ол".Lynx отобразит код и уменьшит его до уровня, видимого в браузере.

...