Como dije en mi comentario, generalmente no es una buena idea analizar HTML con expresiones regulares, pero a veces puedes salirte con la tuya si el HTML que estás analizando se comporta bien.
Para obtener solo las URL que están en el hrefatributo de <a>elementos, me resulta más fácil hacerlo en varias etapas. Según sus comentarios, parece que solo desea el dominio de nivel superior, no la URL completa. En ese caso, puede usar algo como esto:
grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
donde source.htmlestá el archivo que contiene el código HTML para analizar.
Este código imprimirá todas las URL de nivel superior que ocurran como el hrefatributo de cualquier <a>elemento en cada línea. La -iopción para el primer grepcomando es asegurarse de que funcione tanto en elementos <a>como en <A>elementos. Supongo que también podría dar -ial segundo greppara capturar HREFatributos en mayúsculas , OTOH, preferiría ignorar ese HTML roto. :)
Para procesar los contenidos de http://google.com/
wget -qO- http://google.com/ |
grep -Eoi '<a [^>]+>' |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
salida
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
Mi salida es un poco diferente de los otros ejemplos a medida que me redirigen a la página australiana de Google.