Expressions complexes

TerminalVoici 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

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

Ce contenu a été publié dans Bash, Documentation Microlinux, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.