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

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í .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *