Як я вже говорив у своєму коментарі, звичайно не годиться розбирати 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>елементів. Я думаю, ви також можете дати -i2-му 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.