Folosesc RegEx Buddy pentru a prototipa și a depana expresiile mele regulate. RegEx Buddy îmi permite să aleg între mai multe tipuri diferite de motoare de expresie regulată (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE etc.).
Ce face motorul de expresie regulată bash use (de exemplu, în instrucțiunile if
și case
)? Execut Centos 5.5 pe 32 de biți și 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.
Cred că „voi fi GNU BRE sau GNU ERE?
Răspuns
bash (și shell-urile POSIX în general) nu folosesc expresii regulate în case
declarație, mai degrabă modele glob .
Există un sprijin limitat pentru expresiile regulate care utilizează =~
operator; vezi detalii la: http://mywiki.wooledge.org/BashGuide/Patterns ,
care spune că bash
folosește Expresii regulate extinse (ERE).
Comentarii
- Mulțumesc. Al doilea link menționează ERE despre care cred că este GNU ERE.
Răspuns
Bash nu folosește niciunul dintre tipurile de expresii regulate de mai sus din if
și din declarațiile case
.
Mai degrabă, folosește modele de tip shell shell , care sunt mai puțin puternice decât orice fel de expresie regulată. Versiunile relativ noi ale bash permit, de asemenea, utilizarea unor modele glob extinse care sunt expresiv egale cu expresiile regulate fără ancore (de linie), dar inclusiv termeni negați, dar cu o sintaxă diferită de oricare dintre tipurile de expresii regulate menționate mai sus.
Rețineți totuși că globurile shell extinse trebuie activate înainte de utilizare cu shopt -s extglob
atât într-un script shell, fie interactiv.
Într-un singur loc excepțional, și anume în cadrul comenzii condiționale [[ ]]
, relația binară =~
permite verificarea unui șir din stânga partea împotriva unui regulat extins expresie ERE în partea dreaptă.
Răspuns
Conform ghidului Bash legat, Bash (începând cu versiunea 3.0+) folosește: „dialectul Expresie regulată extinsă (ERE) dialect.”
Puteți găsi mai multe informații despre acel dialect aici .