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.
