Yo uso RegEx Buddy para crear prototipos y depurar mis expresiones regulares. RegEx Buddy me permite elegir entre varios tipos de motores de expresiones regulares diferentes (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE, etc.).
Qué hace el motor de expresiones regulares uso de bash (por ejemplo, en declaraciones if
y case
)? Estoy ejecutando Centos 5.5 de 32 bits y bash 3.2.25 (1):
[kevin@mon01 scratch]$ bash --version GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc.
¿Supongo que será GNU BRE o GNU ERE?
Respuesta
bash (y los shells POSIX en general) no utilizan expresiones regulares en case
declaración, en lugar de patrones glob .
Existe un soporte limitado para expresiones regulares que usan =~
operador; consulte los detalles en: http://mywiki.wooledge.org/BashGuide/Patterns ,
que dice que bash
utiliza expresiones regulares extendidas (ERE).
Comentarios
- Gracias. El segundo enlace menciona ERE, que supongo que es GNU ERE.
Respuesta
Bash no usa ninguno de los tipos anteriores de expresiones regulares en las declaraciones if
y case
.
Más bien, utiliza patrones de shell glob , que son menos potentes que cualquier tipo de expresión regular. Las versiones relativamente nuevas de bash también permiten el uso de patrones glob extendidos que son expresivamente iguales a expresiones regulares sin anclajes (de línea) pero que incluyen términos negados, pero con una sintaxis diferente de cualquiera de los tipos de expresión regular mencionados anteriormente.
Sin embargo, tenga en cuenta que los globs de shell extendidos deben habilitarse antes del uso con shopt -s extglob
tanto en un script de shell como de forma interactiva.
En un solo lugar excepcional, a saber, dentro del comando condicional [[ ]]
, la relación binaria =~
permite verificar una cadena a la izquierda lado contra un regular extendido expresión ERE en el lado derecho.
Respuesta
De acuerdo con la guía Bash vinculada, Bash (desde la versión 3.0+) usa: «el dialecto Expresión regular extendida (ERE) .»
Se puede encontrar más información sobre ese dialecto aquí .