Certaines commandes Linux, comme grep, sed, ou awk, acceptent des regex POSIX (POSIX [Portable Operating System Interface] est ni plus ni moins que le nom des normes qui s’appliquent aux commandes et logiciels des plateformes UNIX).
Il existe deux familles :
Type de Regex | Commandes |
---|---|
BRE | grep, vi, sed, csplit, dbx, dbxtool, more, ed, expr, lex, pg, nl, rdist |
ERE | egrep, awk, nawk |
grep
utilise par défaut les regex BRE, mais il est possible d’utiliser les caractères ERE pourvu qu’ils soient précédés d’un backslash (\) : ls | grep 'filea\|fileb'
Il ne faut pas confondre les regex POSIX et les wildcards. Afin d’empêcher que le shell interprète un caractère de regex en wildcard, il est nécessaire entourer les regex de quotes. : ls | grep '^file'
.
^a Commence par a
a$ Finit par a
\ Caractère d'échappement
. Tout caractère
[ab] a ou b
[^ab] Ni a ni b
[a-z] Plage ASCII entre a et z
\w Alphanumérique ou _ ([a-zA-Z0-9])
\W PAS un alphanumérique ni _ ([^a-zA-Z0-9])
\s Caractère d'espace ([ \t\r\n\v\f])
\S PAS un caractère d'espace
Il est évidemment possible d’utiliser les classes POSIX
```
[[:alpha:]]
```
* 0 à n fois
\b Délimiteur de mot ([^a-zA-Z0-9_] en début ou fin de mot)
\B PAS un délimiteur de mot ([a-zA-Z0-9_])
\< Délimiteur en DEBUT de mot
\> Délimiteur en FIN de mot
a|b a ou b
(ab) a suivit de b, dans un groupe capturant (9 groupes au maximum)
(-|_)a\1 a entouré de - ou _
filea|b filea ou b
file(a|b) filea ou fileb
? 0 ou 1 fois
+ Au moins 1 fois
{2} 2 fois
{2,4} Entre 2 et 4 fois
{2,} Au moins 2 fois
{,2} Entre 0 et 2 fois