Regex Match en Bash
- Re-Match Operator en Bash
- Coincidir números en Bash
- Regex Coincide con el comienzo de una cadena en Bash
- Regex Coincide con el final de una cadena en Bash
- Regex Match Email en Bash
Este tutorial demuestra la coincidencia de expresiones regulares utilizando el operador re-match en bash.
Re-Match Operator en Bash
El operador =~
se conoce como operador de re-coincidencia. Utiliza la siguiente sintaxis.
[[ string =~ regex ]]
El operador de re-coincidencia realiza una coincidencia de expresiones regulares de la cadena de izquierda a derecha. Si el lado izquierdo coincide con el lado derecho, el operador devuelve un 0
y un 1
en caso contrario.
Coincidir números en Bash
El siguiente script comprueba si la variable $greet
tiene los caracteres mencionados en el lado derecho, números en nuestro caso. Si hay una coincidencia completa, el operador de re-coincidencia devuelve un 0
y el script imprime la salida correcta.
greet="Hello,World!"
if [[ $greet =~ [0-9] ]]; then
printf "$greet is a number\n"
else
printf "$greet is not a number\n"
fi
Dado que el valor de la variable $greet
solo tiene caracteres que no sean números, el operador de re-coincidencia devuelve un 1
e imprime el resultado a continuación.
Hello,World! is not a number
Aquí creamos una nueva variable en el script que solo tiene números llamados num
. Luego verificamos si la variable num
solo tiene números, e imprimimos la salida respectiva dependiendo del valor devuelto por el operador re-match.
#!/bin/env bash
num="2021"
if [[ $num =~ [0-9] ]]; then
printf "$num is a number\n"
else
printf "$num is not a number\n"
fi
Dado que la variable num
solo tiene números, el operador de re-coincidencia devuelve un 0
y el script imprime la siguiente declaración.
2021 is a number
Regex Coincide con el comienzo de una cadena en Bash
El siguiente script comprueba si el valor de la variable $greet
comienza con números. El ^
se utiliza para especificar que coincidan los caracteres al principio de una cadena. Dependiendo del valor devuelto por el operador, imprimimos la salida respectiva.
#!/bin/env bash
greet="123Hello,World!"
if [[ $greet =~ ^[0-9] ]]; then
printf "$greet starts with a digit(s).\n"
else
printf "$greet does not start with a digit(s)\n"
fi
Dado que el valor de la variable $greet
comienza con un número, el operador devuelve un 0
e imprime el resultado a continuación.
123Hello,World! starts with a digit(s).
Establezcamos $greet
en un nuevo valor como se muestra a continuación y ejecutemos el script.
#!/bin/env bash
greet="Hello,World!123"
if [[ $greet =~ ^[0-9] ]]; then
printf "$greet starts with a digit(s).\n"
else
printf "$greet does not start with a digit(s)\n"
fi
El operador bash devolverá 1
ya que la cadena de la variable, $greet
, no comienza con un número. El script imprimirá el resultado que se muestra a continuación.
Hello,World!123 does not start with a digit(s)
Regex Coincide con el final de una cadena en Bash
El siguiente script comprueba si el valor de la variable $greet
termina con números. El $
se utiliza para especificar que coincidan los caracteres al final de la cadena.
La salida que se imprimirá dependerá del valor devuelto por el operador de re-coincidencia.
#!/bin/env bash
greet="Hello,World!123"
if [[ $greet =~ [0-9]$ ]]; then
printf "$greet ends with a digit(s).\n"
else
printf "$greet does not end with a digit(s)\n"
fi
El valor de la cadena en la variable $greet
termina con números. El operador de re-coincidencia devuelve un 0
y el script imprime la salida a continuación.
Hello,World!123 ends with a digit(s).
Cambiemos el valor de la variable $greet
como se muestra en el siguiente script.
#!/bin/env bash
greet="123Hello,World!"
if [[ $greet =~ [0-9]$ ]]; then
printf "$greet ends with a digit(s).\n"
else
printf "$greet does not end with a digit(s)\n"
fi
Dado que la cadena de la variable $greet
no termina con un número o números, el operador de re-coincidencia devuelve 1
y el script imprime la salida a continuación.
123Hello,World! does not end with a digit(s)
Regex Match Email en Bash
Para hacer coincidir correos electrónicos, generalmente se utiliza el patrón regex ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$
.
#!/bin/env bash
email="example@delftstack.com"
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
printf "$email is a valid email.\n"
else
printf "$email is not a valid email.\n"
fi
El resultado a continuación muestra un correo electrónico que se verificó y pasó la verificación.
example@delftstack.com is a valid email.
Eliminemos el .com
al final del correo electrónico como se muestra a continuación y ejecutemos el script.
#!/bin/env bash
email="example@delftstack"
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
printf "$email is a valid email.\n"
else
printf "$email is not a valid email.\n"
fi
El correo electrónico no pasa la prueba porque no tiene la última parte, el .com
.
example@delftstack is not a valid email.