Regex Match en Bash

Fumbani Banda 30 enero 2023
  1. Re-Match Operator en Bash
  2. Coincidir números en Bash
  3. Regex Coincide con el comienzo de una cadena en Bash
  4. Regex Coincide con el final de una cadena en Bash
  5. Regex Match Email en Bash
Regex Match 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.
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Artículo relacionado - Bash Regex