¿Qué tipo de motor de expresión regular usa bash?

12

Uso RegEx Buddy para crear prototipos y depurar mis expresiones regulares. RegEx Buddy me permite elegir entre varios tipos diferentes de motores de expresión regular (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE, etc.).

¿Qué motor de expresión regular usa bash (por ejemplo, en ify casedeclaraciones)? 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?

Kev
fuente

Respuestas:

11

bash (y shells POSIX en general) no usan expresiones regulares en la casedeclaración, sino patrones globales .

Hay soporte limitado para expresiones regulares usando el =~operador; ver detalles en: http://mywiki.wooledge.org/BashGuide/Patterns ,
que dice que bashusa Expresiones regulares extendidas (ERE).

Riccardo Murri
fuente
Gracias. El segundo enlace menciona ERE, que supongo que es GNU ERE.
Kev
3

Bash no usa ninguno de los tipos anteriores de expresiones regulares en iflas casedeclaraciones y.

Más bien, utiliza patrones de globos de concha, 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 expresamente iguales a las 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 globos de shell extendidos deben habilitarse antes de su uso shopt -s extglob tanto en un script de shell como de forma interactiva.

En un único lugar excepcional, es decir, dentro del [[ ]]comando condicional, la =~relación binaria permite verificar una cadena en el lado izquierdo contra una expresión regular extendida ERE en el lado derecho.

Franki
fuente
0

Según la guía de Bash vinculada, Bash (desde la versión 3.0+) usa: "el dialecto de Expresión regular extendida (ERE) ".

Puede encontrar más información sobre ese dialecto aquí .

SkyLeach
fuente