Eu uso o RegEx Buddy para criar protótipos e depurar minhas expressões regulares. RegEx Buddy me permite escolher entre vários tipos diferentes de mecanismo de expressão regular (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE etc.).
O que o mecanismo de expressão regular faz uso do bash (por exemplo, nas instruções if
e case
)? 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.
Estou supondo que será GNU BRE ou GNU ERE?
Resposta
bash (e shells POSIX em geral) não usam expressões regulares no case
, em vez de padrões glob .
Há suporte limitado para expressões regulares usando =~
; veja os detalhes em: http://mywiki.wooledge.org/BashGuide/Patterns ,
que diz que bash
usa Expressões regulares estendidas (ERE).
Comentários
- Obrigado. O segundo link menciona ERE que suponho ser GNU ERE.
Resposta
O Bash não usa nenhum dos os tipos de expressões regulares acima nas instruções if
e case
.
Em vez disso, usa padrões globais de shell , 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 de glob estendidos que são expressivamente iguais a expressões regulares sem âncoras (de linha), mas incluindo termos negados, mas com uma sintaxe diferente de qualquer os tipos de expressão regular mencionados acima.
No entanto, observe que os globs de shell estendidos devem ser ativados antes do uso com shopt -s extglob
em um script de shell ou interativamente.
Em um único lugar excepcional, a saber, dentro do [[ ]]
comando condicional, a =~
relação binária permite verificar uma string à esquerda lado contra um regular estendido expressão ERE no lado direito.
Resposta
De acordo com o guia Bash vinculado, Bash (desde a versão 3.0+) usa: “the Expressão regular estendida (ERE) dialeto.”
Mais informações sobre esse dialeto podem ser encontradas aqui .