Coincidencia de patrones en Bash

Olorunfemi Akinlua 20 junio 2023
  1. Use el operador =~ para la coincidencia de patrones
  2. Utilice el operador * para la coincidencia de patrones
  3. Use subpatrones para la coincidencia de patrones
Coincidencia de patrones en Bash

La coincidencia de patrones es una característica poderosa en Bash que le permite comparar cadenas con patrones para encontrar coincidencias o realizar acciones basadas en el resultado de la comparación. Esto puede ser útil en situaciones como verificar el formato de una cadena o extraer subcadenas de una cadena más grande.

Este artículo discutirá cómo hacer la coincidencia de patrones en Bash y cubrirá algunos operadores y técnicas comunes que se usan en la coincidencia de patrones.

Use el operador =~ para la coincidencia de patrones

Para comprender cómo funciona la coincidencia de patrones en Bash, veamos primero el operador =~ utilizado para realizar la coincidencia de patrones. Este operador toma dos operandos: la cadena con la que se hará coincidir y el patrón con el que se comparará.

Por ejemplo, digamos que tenemos una cadena llamada mi_cadena que contiene una URL y queremos verificar si comienza con "http" o "https". Podemos usar el operador =~ para realizar esta comparación.

my_string="https://www.example.com"

if [[ $my_string =~ ^https?:// ]]; then
  echo "The string starts with a valid URL"
fi

Producción :

The string starts with a valid URL

En el código anterior, usamos el operador =~ para comparar la variable my_string con el patrón ^https?://. El carácter ^ indica que el patrón debe coincidir al principio de la cadena, mientras que el ? carácter indica que el carácter anterior (en este caso, la s en https) es opcional.

Esto significa que el patrón coincidirá con "http://" o "https://" al comienzo de la cadena.

Si la comparación es exitosa, se ejecutará la instrucción if y se imprimirá el mensaje "La cadena comienza con una URL válida".

Utilice el operador * para la coincidencia de patrones

Otro operador común en la coincidencia de patrones es el carácter * (asterisco), que indica que el carácter anterior puede coincidir cero o más veces. Por ejemplo, digamos que tenemos una cadena que contiene un número y queremos verificar si es un número decimal válido con dos decimales como máximo.

Podemos usar el operador * para realizar esta comparación.

my_string="3.14"

if [[ $my_string =~ ^[0-9]+.[0-9]{0,2}$ ]]; then
echo "The string is a valid decimal number"
else
echo "The string is not a valid decimal number"
fi

Producción :

The string is a valid decimal number

En el código anterior, usamos el operador =~ para comparar la variable my_string con el patrón ^[0-9]+\.[0-9]{0,2}$. El carácter ^ indica que el patrón debe coincidir al principio de la cadena, mientras que el carácter $ indica que el patrón debe coincidir al final.

La clase de caracteres [0-9] coincide con cualquier dígito del 0 al 9, y el carácter + indica que la clase de caracteres anterior debe coincidir una o más veces.

Usamos el carácter \ (barra invertida) para escapar del significado especial de . (punto), que se utiliza para hacer coincidir cualquier carácter único. El cuantificador {0,2} indica que el carácter anterior (en este caso, la clase de caracteres [0-9]) debe coincidir de cero a dos veces.

Esto significa que el patrón solo coincidirá con números con dos decimales como máximo, como "3.14" o "42.00".

Si la comparación es exitosa, se ejecutará la instrucción if y se imprimirá el mensaje "La cadena es un número decimal válido".

Use subpatrones para la coincidencia de patrones

Otra técnica común utilizada en la coincidencia de patrones es el uso de subpatrones. Un subpatrón es una parte de un patrón encerrado entre paréntesis y se puede usar para agrupar caracteres o hacer referencia a una subcadena coincidente en la cadena de entrada.

Por ejemplo, digamos que tenemos una cadena que contiene una fecha en el formato "YYYY-MM-DD", y queremos extraer el año, mes y día de la cadena. Podemos usar subpatrones para realizar esta extracción.

my_string="2022-11-20"

if [[ $my_string =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})$ ]]; then
  year=${BASH_REMATCH[1]}
  month=${BASH_REMATCH[2]}
  day=${BASH_REMATCH[3]}

  echo "The year is: $year"
  echo "The month is: $month"
  echo "The day is: $day"
fi

Producción :

The year is: 2022
The month is: 11
The day is: 20

En el código anterior, usamos el operador =~ para comparar la variable my_string con la variable ^([0-9]{4})-([0-9]{2})-([0-9]{2})$ patrón. Los caracteres ^ y $ indican que el patrón debe coincidir con toda la cadena, mientras que ([0-9]{4}), ([0-9]{2}) y ([0-9]{2}) los subpatrones coinciden con las partes de año, mes y día de la fecha, respectivamente.

Si la comparación tiene éxito, se ejecutará la instrucción if y se extraerán el año, el mes y el día de la cadena de entrada. Las subcadenas extraídas se almacenan en la matriz BASH_REMATCH, y se puede acceder a ellas mediante los índices 1, 2 y 3, que corresponden al primer, segundo y tercer subpatrones, respectivamente.

En conclusión, la coincidencia de patrones es una función poderosa en Bash que le permite comparar cadenas con patrones para encontrar coincidencias o realizar acciones basadas en el resultado de la comparación. Esto se puede hacer usando el operador =~, que toma una cadena y un patrón como operandos y devuelve true si la cadena coincide con el patrón.

Los operadores y técnicas comunes utilizados en la coincidencia de patrones incluyen el operador * (asterisco), que coincide con el carácter anterior cero o más veces, y los subpatrones, que le permiten agrupar caracteres o extraer subcadenas coincidentes de la cadena de entrada.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn