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ą href
atrybutami <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.html
jest plik zawierający kod HTML do przeanalizowania.
Ten kod wydrukuje wszystkie adresy URL najwyższego poziomu, które występują jako href
atrybut dowolnych <a>
elementów w każdym wierszu. -i
Opcja do pierwszego grep
polecenia jest, aby zapewnić, że będzie działać na obu <a>
i <A>
elementów. Chyba można też dać -i
do 2 grep
uchwycić wielkimi literami HREF
atrybuty 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.