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