Voici le sixième volet de mon cours d’introduction au shell Bash. La dernière fois, nous avons vu la substitution de noms de fichiers. Aujourd’hui, nous abordons les expressions complexes (extended pattern matching dans la documentation anglophone).
- Prérequis
- L’expression ?(…)
- L’expression *(…)
- L’expression +(…)
- L’expression @(…)
- L’expression !(…)
- Alternatives
- Documentation
Prérequis
Pour utiliser les expressions complexes en Bash, il faut préalablement activer l’option extglob
avec la commande suivante.
$ shopt -s extglob
Créer une série de fichiers que nous utiliserons dans les exemples suivants.
$ touch fic fic866866.log fic866.log fic868.log readme.txt \ fic866866866.log fic866868.log fic867.log fic.log typescript
L’expression ?(…)
L’expression ?(expression)
sera présente 0 ou 1 fois.
Fichiers dont le nom commence par fic
suivi de 0 ou 1 occurrence de 866
, suivi de .log
.
$ ls fic?(866).log fic866.log fic.log
L’expression *(…)
L’expression *(expression)
sera présente entre 0 et n fois.
Fichiers dont le nom commence par fic
, suivi de 0 à n occurrence(s) de 866
, suivi de .log
.
$ ls fic*(866).log fic866866866.log fic866866.log fic866.log fic.log
L’expression +(…)
L’expression +(expression)
sera présente entre 1 et n fois.
Fichiers dont le nom commence par fic
, suivi d’au moins une occurrence de 866
, suivi de .log
.
$ ls fic+(866).log fic866866866.log fic866866.log fic866.log
L’expression @(…)
L’expression @(expression)
sera présente exactement 1 fois.
Fichiers dont le nom commence par fic
, suivi exactement d’une occurrence de 866
, suivi de .log
.
$ ls fic@(866).log fic866.log
L’expression !(…)
L’expression !(expression)
ne sera pas présente.
Fichiers dont le nom commence par fic
, suivi d’une expression qui n’est pas la chaîne 866
, suivi de .log
.
$ ls fic!(866).log fic866866866.log fic866866.log fic866868.log fic867.log fic868.log fic.log
Fichiers dont le nom ne commence pas par fic
.
$ ls !(fic*) readme.txt typescript
Alternatives
Une barre verticale |
à l’intérieur d’une expression complexe prend le sens de “ou bien”.
Fichiers dont le nom commence par fic
, suivi de 866
ou 867
, suivi de .log
.
$ ls fic@(866|867).log fic866.log fic867.log
Fichiers dont le nom commence par fic
, suivi de 1 à n occurrence(s) de 866
ou 868
, suivi de .log
.
$ ls fic+(866|868).log fic866866866.log fic866866.log fic866868.log fic866.log fic868.log
Documentation
- Christine Deffaix-Rémy – Programmation shell sous Unix/Linux, pp. 34 – 37
- Cameron Newham – Learning the Bash shell, p. 99
- Carl Albing – Bash Cookbook, p. 122
Lire la suite : Les redirections