Con las expresiones regulares nosotros podemos saber cuando una linea en una archivo de texto, un csv o lo que sea es o no una url, esto nos brinda muchas ventajas para que podamos quitar las cosas que no nos sirven en un archivo o cosas similares, entonces, hay distintas maneras para hacer esto y por eso voy a hacer este articulo. Lo primero que tenemos que saber es la forma o el formato de una url, por eso y para razones de este ejercicio, en un archivo de texto hay que poner el siguiente texto:
https://platzi.com/clases/1301-expresiones-regulares/11860-urls9102/ https://platzi.com/clases/expresiones-regulares/ https://www.instagram.com/BlueOrigin/ https://www.instagram.com/ https://ichef.bbci.co.uk/news/640/cpsprodpb/8536/production/_103520143_gettyimages-908714708.jpg http://www.purina-latam.com/sites/g/files/auxxlc391/files/styles/facebook_share/public/presentar-a-tu-gato.jpg?itok=5IOxXrPh https://www.facebook.com/ nombre-usuario
Una vez teniendo el contenido, que en mi caso lo voy a nombrar urls.txt
, entonces ahora voy a proceder a hacer el comando con grep
en la consola de Linux. Si tu lo estas haciendo en Atom, no hay problema, lo importante es tener el comando y que este funcione.
El comando es el siguiente:
grep -E -no'^https?:\/\/[a-z\.\-]+' urls.txt
Donde:
- grep es el comando de Linux
- -E es para que
grep
tome las expresiones regulares - -no son dos banderas de
grep
para que me de la linea del match y me de el match solo, sin texto extra - ^ es el inicio de la linea
- https? dice que se tiene que tener
http
para que haga match y las
es opcional - // es para los dos slashs que le siguen al https
- [a-z.-]+ es para indicarle al comando que quiero todas las letras de la a-z, además de que puede incluir puntos y guiones, solo que hay que saltarlos, ya que son reservados. Por ultimo el signo mas quiere decir que puede ser uno o mas de cualquiera de los símbolos antes mencionados.
Al aplicar este comando, lo que obtenemos es lo siguiente:
1:https://platzi.com 2:https://platzi.com 3:https://www.instagram.com 4:https://www.instagram.com 5:https://ichef.bbci.co.uk 6:http://www.purina-latam.com 7:https://www.facebook.com
Hasta aquí ya sabemos cuales si hacen match y cuales son los dominios de los que estamos hablando, además de esto, si queremos saber que mas hay después del dominio podemos usar el siguiente comando
grep -E -no '^https?:\/\/[a-z\.\-]+\/.+' urls.txt
Para obtener el siguiente resultado:
1:https://platzi.com/clases/1301-expresiones-regulares/11860-urls9102/ 2:https://platzi.com/clases/expresiones-regulares/ 3:https://www.instagram.com/BlueOrigin/ 5:https://ichef.bbci.co.uk/news/640/cpsprodpb/8536/production/_103520143_gettyimages-908714708.jpg 6:http://www.purina-latam.com/sites/g/files/auxxlc391/files/styles/facebook_share/public/presentar-a-tu-gato.jpg?itok=5IOxXrPh 7:https://www.facebook.com/ nombre-usuario
Sin embargo, podemos ver que en el 7 hay un espacio después del .com/
, lo que significa que esa url
no es del todo valida, para resolver eso tenemos que corregir nuestro código, quedándonos de la siguiente manera:
grep -E -no '^https?:\/\/[a-z\.\-]+\/\S+' urls.txt
Donde:
- / es para que me cuente el ultimo slash después del dominio
- \S+ es para que me acepte todo menos espacios en blanco
El resultado es el siguiente:
1:https://platzi.com/clases/1301-expresiones-regulares/11860-urls9102/ 2:https://platzi.com/clases/expresiones-regulares/ 3:https://www.instagram.com/BlueOrigin/ 5:https://ichef.bbci.co.uk/news/640/cpsprodpb/8536/production/_103520143_gettyimages-908714708.jpg 6:http://www.purina-latam.com/sites/g/files/auxxlc391/files/styles/facebook_share/public/presentar-a-tu-gato.jpg?itok=5IOxXrPh