Регулярное выражение для извлечения (видео) имен из тегов HTML - PullRequest
1 голос
/ 02 марта 2011

У меня есть веб-страница, которая содержит следующий фрагмент кода со ссылками на видео:

<a href="video.php?video=sampel1.mov">
<a href="video.php?video=anothersample.mov">
<a href="video.php?video=yetanothersample.mov">

Я хочу использовать sed и регулярное выражение для извлечения названий видео, например:

sampel1.mov 
anothersample.mov 
yetanothersample.mov

так что я могу использовать wget для их загрузки.

Большое спасибо!

Ответы [ 5 ]

3 голосов
/ 02 марта 2011

Попробуйте:

sed -n 's/.*video=\([^"]*\)">/\1/p' inputfile

С GNU grep:

grep -Po '(?<=video=).*?(?=">)' inputfile

Передать любую из этих команд через xargs:

command | xargs wget ...
1 голос
/ 06 октября 2011

Вы можете использовать sed для получения названий ваших фильмов.

Создать файл, например. movie_string.txt со всеми строками, содержащими название фильма

Теперь создайте файл сценария sed, скажем movie_name.sed со следующим:

s/\"//g
s/<//g
s/>//g
s/\(.*=\)\([a-z]\)/ \2/

сохранить и выйти.

Теперь из терминала вам нужно просто выполнить следующую команду, чтобы перенаправить результат в другой файл movie.txt :

sed -f movie_name.sed movie_string.txt > movie.txt
1 голос
/ 02 марта 2011

Вы можете сделать что-то простое, как

grep -o 'video.php?video=[^"]\+' | sed -e 's/^video.php?video=//'
0 голосов
/ 02 марта 2011
cat yourlinks.txt | cut -f2 -d\" | cut -f2 -d=
0 голосов
/ 02 марта 2011

Предупреждение: синтаксический анализ HTML / XML с использованием регулярных выражений обычно не очень хорошая идея .Вместо этого используйте язык, такой как Ruby или Python, который имеет библиотеку синтаксического анализатора XML, которая может интеллектуально интерпретировать структуру страницы.

Вот несколько вопросов, которые могут вам помочь (многие другие - только быстрый поиск):

Обновление:

В своем комментарии вы упомянули, что выВы уже знаете, как делать извлечение ссылок в Python, но вы не хотите использовать скрипт Python, который напрямую вызывает wget.Вы все еще можете решить эту проблему с помощью Python (что, вероятно, является самым простым решением, поскольку вы уже знаете, как это сделать).Если ваш скрипт Python печатает извлеченные имена файлов в стандартный вывод с новой строкой после каждого имени, вы можете использовать любую из следующих команд оболочки, чтобы сделать то, что вы хотите сделать:

python your_script.py >filenames.txt
wget -i filenames.txt

или

python your_script.py | wget -i -

Это передаст данные, извлеченные вашим скриптом, в wget, не требуя, чтобы ваш скрипт вызывал wget через системный вызов.

...