Come ho detto nel mio commento, generalmente non è una buona idea analizzare HTML con espressioni regolari, ma a volte puoi cavartela se l'HTML che stai analizzando è ben educato.
Per ottenere solo URL che si trovano hrefnell'attributo di <a>elementi, trovo più semplice farlo in più fasi. Dai tuoi commenti, sembra che tu voglia solo il dominio di primo livello, non l'URL completo. In tal caso puoi usare qualcosa del genere:
grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
dove si source.htmltrova il file contenente il codice HTML da analizzare.
Questo codice stamperà tutti gli URL di livello superiore che si presentano come l' hrefattributo di tutti gli <a>elementi in ciascuna riga. L' -iopzione per il primo grepcomando è assicurarsi che funzionerà su entrambi <a>e sugli <A>elementi. Suppongo che potresti anche dare -ial 2 ° grepper catturare gli HREFattributi maiuscoli , OTOH, preferirei ignorare un HTML così rotto. :)
Per elaborare il contenuto di http://google.com/
wget -qO- http://google.com/ |
grep -Eoi '<a [^>]+>' |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
produzione
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
Il mio output è leggermente diverso dagli altri esempi quando vengo reindirizzato alla pagina Google australiana.