Jak powiedziałem w moim komentarzu, generalnie nie jest dobrym pomysłem analizowanie kodu HTML za pomocą wyrażeń regularnych, ale czasem możesz go uniknąć, jeśli analizowany kod HTML jest dobrze zachowany.
Aby uzyskać tylko adresy URL, które są hrefatrybutami <a>elementów, najłatwiej jest to zrobić na wielu etapach. Z twoich komentarzy wynika, że chcesz tylko domeny najwyższego poziomu, a nie pełnego adresu URL. W takim przypadku możesz użyć czegoś takiego:
grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
gdzie source.htmljest plik zawierający kod HTML do przeanalizowania.
Ten kod wydrukuje wszystkie adresy URL najwyższego poziomu, które występują jako hrefatrybut dowolnych <a>elementów w każdym wierszu. -iOpcja do pierwszego greppolecenia jest, aby zapewnić, że będzie działać na obu <a>i <A>elementów. Chyba można też dać -ido 2 grepuchwycić wielkimi literami HREFatrybuty OTOH, wolałbym zignorować taką złamaną HTML. :)
Aby przetworzyć zawartość http://google.com/
wget -qO- http://google.com/ |
grep -Eoi '<a [^>]+>' |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
wynik
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
Moje wyniki nieco się różnią od innych przykładów, gdy jestem przekierowywany na australijską stronę Google.