Как я уже сказал в своем комментарии, анализировать HTML с помощью регулярных выражений, как правило, не очень хорошая идея, но иногда это может сойти с рук, если анализируемый HTML работает правильно.
Чтобы получить только те URL-адреса, которые находятся в href
атрибуте <a>
элементов, я считаю, что проще всего сделать это в несколько этапов. Судя по вашим комментариям, вам нужен только домен верхнего уровня, а не полный URL. В этом случае вы можете использовать что-то вроде этого:
grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
где source.html
файл, содержащий HTML-код для разбора.
Этот код будет печатать все URL верхнего уровня, которые встречаются как href
атрибуты любых <a>
элементов в каждой строке. -i
Вариант первой grep
команды является обеспечение того , она будет работать на обоих <a>
и <A>
элементов. Я полагаю, вы могли бы также дать -i
2-й, grep
чтобы захватить HREF
атрибуты верхнего регистра , OTOH, я бы предпочел игнорировать такой сломанный HTML. :)
Для обработки содержимого http://google.com/
wget -qO- http://google.com/ |
grep -Eoi '<a [^>]+>' |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
выход
http://www.google.com.au
http://maps.google.com.au
https://play.google.com
http://www.youtube.com
http://news.google.com.au
https://mail.google.com
https://drive.google.com
http://www.google.com.au
http://www.google.com.au
https://accounts.google.com
http://www.google.com.au
https://www.google.com
https://plus.google.com
http://www.google.com.au
Мой вывод немного отличается от других примеров, так как я перенаправлен на австралийскую страницу Google.