Expresiones Regulares¶
Las expresiones regulares nos van a ayudar a seleccionar cadenas de texto que contengan un patrón.
Símbolo | |
---|---|
* |
0 o más repeticiones del carácter anterior |
. |
Un carácter cualquiera, pero únicamente 1 |
? |
Una o ninguna repetición del carácter anterior. |
+ |
El carácter anterior se repetir una o más veces. |
[] |
Indica una lista de caracteres que se pueden dar. |
{} |
Nos permite especificar el número de repeticiones. |
^ |
La línea comienza por ... |
[^...] |
Todo lo que NO sea ... |
$ |
La línea termina por ... |
Ejemplos.¶
Ejemplo del uso de "."¶
- Se puede observar que da igual lo que se coloque en el lugar del punto, siempre y cuando sea un único carácter.
Por ejemplo, “rXXot” no es seleccionado, en cambio “rXot” sí.
Ejemplo del uso de "*"¶
- En el caso del “*” quiere decir que la letra que le precede, puede estar o no y en caso de estar puede estar el número de veces que quiera.
Por tanto en el ejemplo seleccionará todo aquello que empiece por una o más “r” consecutivas o que no empiece por “r” y directamente muestre “oot”.
Ejemplo del uso de "?"¶
- En el caso del “?”, la letra precedente se repetirá una o ninguna. Por tanto en el ejemplo NO seleccionará “rrrroot”, pero sí “root” y “oot”:
Ejemplo del uso de "+"¶
- El “+” es parecido al “?” y al “*”, únicamente que el carácter que le precede debe repetirse o una vez o más de una vez. Por tanto en el ejemplo NO seleccionará “oot”, puesto que debe repetirse al menos una vez, pero SÍ seleccionará “root”, “rroot”, “rrrrrrroot”, etc.
Ejemplo del uso de "[ ... ]"¶
- El caso de los corchetes [] es para indicar una lista de valores que se pueden dar. Por ejemplo para indicar que solo se puede introducir un número → [0-9] o para indicar que debe ser una letra [a-zA-Z].
Ejemplo del uso de "{}"¶
- El caso de las llaves {} tiene habitualmente 3 utilidades:
Especificar exactamente el número de repeticiones {N}, es decir una letra se va a repetir necesariamente “N” veces. En el siguiente ejemplo nos cercioraremos de sacar aquellos patrones que sean 9 dígitos (números de teléfono).
En el caso de que queramos que tenga N o más repeticiones usaremos {N,} (fijaos en la coma). En el siguiente ejemplo deberá componerse una contraseña que contiene letras o número (no signos) y además debe tener como mínimo 8 caracteres. Fíjate en que se debe entrecomillar en esta ocasión, puedes entrecomillar siempre ante la duda.
En caso de que queramos que tenga entre un número especifico de repeticiones usamos {N,M} donde N es el mínimo y M el máximo de veces que se puede repetir, ambos incluidos.
Ejemplo del uso de "^"¶
- En el caso de “^”, es que la línea comience por la cadena o expresión regular indicada:
En este ejemplo busca una contraseña que empiece por un número, seguido de cualquier cosa (.*).
Ejemplo del uso de "[^...]"¶
- Cuando ponemos “^” dentro de los corchetes actúa como una negación. En el ejemplo se selecciona las cadenas de texto que NO tengan en ningún momento números.
En este ejemplo busca una contraseña que empiece por un número, seguido de cualquier cosa (.*).
Ejemplo del uso de "$"¶
- Con el “$” simplemente indicamos que la línea termine de cierta manera:
Expresiones Habituales.¶
Cualquier caracter
.*
El “.” nos da cualquier carácter, y el “*” nos dice que cualquier carácter se repita 0 o más veces.
Seleccionar una línea exacta
^XXXXX$
Con la “^” le indicamos que la expresión regular se da a comienzo de línea y con “$” indicamos que además debe terminar la línea con la expresión regular. “XXXX” es la expresión regular que queramos usar.
Seleccionar las líneas en blanco
^$
Con esto le estamos diciendo que la línea empiece y termine con nada en medio.
Ejemplos Avanzados.¶
UIDs asignados a usuarios (1000 en adelante).¶
cat /etc/passwd | cut -d ':' -f3 | grep -wE '^[1-9][0-9]{3,}'
Comprobar si existe un usuario.¶
grep -E '^salva:' /etc/passwd
Usuarios sin contraseña.¶
sudo grep -E '^.*:!:' /etc/shadow
Usuarios Bloqueados.¶
sudo grep -E '^.*:![^:]' /etc/shadow
Seleccionar ficheros.¶
ls -l | grep -E ^-
Expresiones regulares y Scripts.¶
-
Muchas veces tenemos que comparar si cierta variable cumple cierta expresión regular (MATCH). Para ello, en BASH, podemos hacer uso de “=~”.
-
En el siguiente ejemplo se comprueba si el argumento pasado es un número o no.
expresion="^[0-9]+$"
if [[ $1 =~ $expresion ]]
then
echo "ES UN NUMERO"
else
echo "NO ES UN NUMERO"
fi
Como se puede comprobar:
- Se debe primer asignar la expresión regular usada a una variable.
- Hacer uso de los dobles corchetes [[ … ]].
- Hacer uso del comparador especial =~ para expresiones regulares.