Regex для поиска внешних ссылок из файла html, используя grep - PullRequest
4 голосов
/ 09 июня 2010

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

Вот моя команда grep

grep -h -o -e "\(\(mailto:\|\(\(ht\|f\)tp\(s\?\)\)\)\://\)\{1\}\(.*\?\)" "/mnt/websites_folder/folder_to_search" -r 

теперь grep, похоже, возвращает все после внешних ссылок в данной строке

Пример

если html-файл содержит что-то подобное в той же строке

Google

https://yahoo.com'>Yahoo

тогда данная команда grep возвращает следующий результат

http://www.google.com">Google</a><p><a href='https://yahoo.com'>Yahoo</a></p>

Идея в том, что если html-файл содержит более одной ссылки (irrespective in a,img etc) в одной строке, тогда регулярное выражение должно извлекать только ссылки, а не все содержимое этой строки

Мне удалось разработать то же самое в rubular.com регулярное выражение выглядит следующим образом

("|')(\b((ht|f)tps?:\/\/)(.*?)\b)("|')

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 09 июня 2010

Попробуйте это:

cat / path / to / file |egrep -o "(mailto | ftp | http (s)?: //) {1} [^ '\"] + "

egrep -o "(mailto|ftp|http(s)?://){1}[^'\"]+" /path/to/file

Выводит одну ссылку на строку. Предполагается,ссылка заключена в одинарные или двойные кавычки. Чтобы исключить некоторые ссылки на домен, используйте -v:

egrep -o "(mailto|ftp|http(s)?://){1}[^'\"]+" /path/to/file | egrep -v "yahoo.com"
1 голос
/ 09 июня 2010

По умолчанию grep печатает всю строку, в которой найдено совпадение.Переключатель -o выбирает только совпадающие части линии.См. Справочную страницу .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...