Expresiones Regulares con el Operador =~
El operador =~
de Bash permite la potente coincidencia de expresiones regulares. Las expresiones regulares ofrecen mucha más flexibilidad que la simple coincidencia con caracteres comodín, permitiéndole definir patrones complejos para la manipulación y validación de cadenas. El operador devuelve verdadero si la cadena de la izquierda coincide con la expresión regular de la derecha, la cual debe estar encerrada entre comillas dobles.
string="Esta es una cadena de prueba con 123 dígitos"
if [[ "$string" =~ "prueba" ]]; then
echo "La cadena contiene 'prueba'"
fi
if [[ "$string" =~ "dígitos$" ]]; then # $ coincide con el final de la cadena
echo "La cadena termina con 'dígitos'"
fi
if [[ "$string" =~ "[0-9]+" ]]; then # Coincide con uno o más dígitos
echo "La cadena contiene dígitos"
fi
if [[ "$string" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$ ]]; then
echo "La cadena parece una dirección de correo electrónico"
fi
Los ejemplos anteriores demuestran el uso básico de expresiones regulares. Para patrones más complejos, consulte un tutorial o referencia exhaustiva de expresiones regulares. La flexibilidad de las expresiones regulares las hace ideales para tareas como la validación de direcciones de correo electrónico, direcciones IP u otros datos estructurados dentro de cadenas.
Coincidencia con Caracteres Comodín con el Operador *
El carácter comodín *
, más simple que las expresiones regulares, coincide con cero o más caracteres. Se utiliza con frecuencia en la expansión de nombres de archivos y en comprobaciones condicionales básicas. Si bien es menos potente, es eficiente para escenarios sencillos.
archivos=(*.txt) # Se expande a una lista de todos los archivos .txt
if [[ "$nombre_archivo" == "*.log" ]]; then
echo "Este es un archivo de registro"
fi
if [[ "$variable" == "pre*suf" ]]; then
echo "La variable comienza con 'pre' y termina con 'suf'"
fi
El primer ejemplo muestra la expansión de nombres de archivos; los demás demuestran la coincidencia de patrones básicos dentro de instrucciones condicionales. Tenga en cuenta que ==
, no =~
, se utiliza para la coincidencia con caracteres comodín.
Extracción de Subpatrones
Tanto las expresiones regulares como los caracteres comodín pueden extraer partes de una cadena coincidente, aunque los métodos difieren significativamente.
Expresiones Regulares (con =~
)
Las expresiones regulares utilizan grupos de captura, definidos con paréntesis ()
, para aislar partes específicas de la cadena coincidente. Estos grupos capturados son accesibles a través de la matriz BASH_REMATCH
.
string="Mi ID de usuario es 12345"
if [[ "$string" =~ "ID es ([0-9]+)" ]]; then
id_usuario="${BASH_REMATCH[1]}"
echo "ID de usuario: $id_usuario"
fi
([0-9]+)
captura uno o más dígitos, almacenados en ${BASH_REMATCH[1]}
.
Caracteres Comodín (con *
)
La coincidencia con caracteres comodín no admite directamente la extracción de subpatrones. En su lugar, necesita técnicas de manipulación de cadenas después de una coincidencia básica.
nombre_archivo="mi_informe_2024-10-26.txt"
if [[ "$nombre_archivo" == "mi_informe_*.txt" ]]; then
fecha="${nombre_archivo%.*}" # Eliminar la extensión '.txt'
fecha="${fecha##*_}" # Eliminar todo antes del último '_'
echo "Fecha del informe: $fecha"
fi
Este ejemplo utiliza la expansión de parámetros para lograr la extracción de subpatrones, demostrando un enfoque menos elegante pero efectivo para escenarios más simples.
Bash ofrece capacidades versátiles de coincidencia de patrones. Elija el método —expresiones regulares o caracteres comodín— que mejor se adapte a sus necesidades, equilibrando potencia y simplicidad.