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 href
atributo 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.html
está el archivo que contiene el código HTML para analizar.
Este código imprimirá todas las URL de nivel superior que ocurran como el href
atributo de cualquier <a>
elemento en cada línea. La -i
opción para el primer grep
comando es asegurarse de que funcione tanto en elementos <a>
como en <A>
elementos. Supongo que también podría dar -i
al segundo grep
para capturar HREF
atributos 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.