Eu uso o RegEx Buddy para criar protótipos e depurar minhas expressões regulares. O RegEx Buddy permite que eu escolha entre vários tipos diferentes de mecanismos de expressão regular (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE etc.).
Qual mecanismo de expressão regular o bash usa (por exemplo, in if
e case
declarações)? Estou executando o Centos 5.5 de 32 bits e o 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.
Eu estou supondo que será GNU BRE ou GNU ERE?
O Bash não usar qualquer um dos tipos acima de expressões regulares na
if
e ascase
declarações.Em vez disso, usa padrões shell glob, que são menos poderosos do que qualquer tipo de expressão regular. Versões relativamente novas do bash também permitem o uso de padrões glob estendidos que são expressivamente iguais a expressões regulares sem âncoras (linha), mas incluindo termos negados, mas com uma sintaxe diferente de qualquer um dos tipos de expressão regular mencionados acima.
Observe, no entanto, que os globs de shell estendidos devem ser ativados antes do uso
shopt -s extglob
em um script de shell ou de forma interativa.Em um único local excepcional, ou seja, dentro do
[[ ]]
comando condicional, a=~
relação binária permite verificar uma sequência no lado esquerdo contra uma expressão regular estendida ERE no lado direito.fonte
De acordo com o guia Bash vinculado, o Bash (desde a versão 3.0+) usa: "o dialeto Extended Regular Expression (ERE) ".
Mais informações sobre esse dialeto podem ser encontradas aqui .
fonte