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 href
nell'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.html
trova il file contenente il codice HTML da analizzare.
Questo codice stamperà tutti gli URL di livello superiore che si presentano come l' href
attributo di tutti gli <a>
elementi in ciascuna riga. L' -i
opzione per il primo grep
comando è assicurarsi che funzionerà su entrambi <a>
e sugli <A>
elementi. Suppongo che potresti anche dare -i
al 2 ° grep
per catturare gli HREF
attributi 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.