K vytváření prototypů a ladění mých regulárních výrazů používám RegEx Buddy . RegEx Buddy mi umožňuje volit mezi řadou různých typů modulů regulárních výrazů (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE atd.).
Co dělá modul regulárních výrazů bash use (například v if
a case
prohlášeních)? Používám 32bitovou verzi Centos 5.5 a 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.
Hádám, že to bude GNU BRE nebo GNU ERE?
Odpověď
bash (a obecně POSIX skořápky) nepoužívají regulární výrazy v case
prohlášení, spíše glob vzory .
Omezená podpora regulárních výrazů pomocí operátor; zobrazit podrobnosti na adrese: http://mywiki.wooledge.org/BashGuide/Patterns ,
říká, že bash
používá rozšířené regulární výrazy (ERE).
Komentáře
- Děkuji. Druhý odkaz zmiňuje ERE, o kterém si myslím, že je GNU ERE.
Odpověď
Bash nepoužívá žádný z výše uvedené druhy regulárních výrazů v příkazech if
a case
.
Spíše používá vzory globálních shellů , které jsou méně výkonné než jakýkoli druh regulárního výrazu. Relativně nové verze bash také umožňují použití rozšířených glob vzorů, které jsou expresivně stejné jako regulární výrazy bez (line) kotev, ale včetně negovaných výrazů, ale se syntaxí odlišnou od kteréhokoli z výše uvedené typy regulárních výrazů.
Pamatujte však, že rozšířené globusy prostředí musí být povoleny před použitím shopt -s extglob
jak ve skriptu prostředí, tak interaktivně.
Na jednom výjimečném místě, konkrétně v podmíněném příkazu [[ ]]
, umožňuje binární relace =~
zkontrolovat řetězec vlevo strana proti prodloužené pravidelné výraz ERE na pravé straně.
Odpověď
Podle propojeného průvodce Bash používá Bash (od verze 3.0+): „the rozšířený regulární výraz (ERE) dialekt.“
Více informací o tomto dialektu naleznete zde .