Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Programmation shell sous Unix/Linux
  3. Les expressions régulières
Extrait - Programmation shell sous Unix/Linux ksh, bash, norme POSIX (avec exercices corrigés) (7e édition)
Extraits du livre
Programmation shell sous Unix/Linux ksh, bash, norme POSIX (avec exercices corrigés) (7e édition)
2 avis
Revenir à la page d'achat du livre

Les expressions régulières

Présentation

Ce chapitre présente les caractères spéciaux des expressions régulières. Celles-ci sont utilisées par un certain nombre de commandes Unix et fournissent un mécanisme puissant de sélection de chaînes de caractères.

Les expressions régulières sont composées de caractères ordinaires et de caractères ayant une signification particulière. Il existe deux types d’expressions régulières :

  • les expressions régulières basiques (ERb) ;

  • les expressions régulières étendues (ERe).

Les ERb sont utilisées par les commandes suivantes :

  • vi (recherche et substitution) ;

  • grep ;

  • expr ;

  • sed.

Les ERe sont utilisées par les commandes suivantes :

  • grep avec l’option -E, egrep ;

  • awk.

Caractères communs aux ERb et ERe

Caractère spécial

Signification

Marqueurs de position

ˆ

Début de ligne

$

Fin de ligne

\<

Début d’un mot. Caractères pouvant faire partie d’un mot : [A-Za-z0-9_]

\>

Fin d’un mot

Représenter un caractère

.

Un caractère quelconque

[liste_de_caractères]

Un caractère cité dans la liste

[ˆliste_de_caractères]

Un caractère qui n’est pas cité dans la liste

Principales classes de caractères POSIX

[:classe:]

Pour la liste se reporter au chapitre Annexes - Classes de caractères POSIX. L’expression [:classe:] doit elle-même être placée entre crochets.

Caractère de répétition

*

0 à n fois le caractère ou regroupement précédent

Caractère de protection

\c

Protection du caractère spécial c

Exemples

Les symboles "images/symbol.PNG" et "images/fleche.png" utilisés dans les exemples représentent les touches [Espace] et [Tabulation].

Expression régulière

Signification

soleil

Chaîne contenant "soleil".

Exemples de correspondance :

Aujourd’hui il fait soleil, mais demain ?

soleil toujours !!

Passer ses vacances au soleil

ˆsoleil

Chaîne commençant par "soleil".

Exemple de correspondance :

soleil toujours !!

soleil$

Chaîne se terminant par "soleil".

Exemple de correspondance :

Passer ses vacances au soleil.

ˆsoleil$

Chaîne contenant strictement "soleil".

ˆ[A-Z][5-9].$ ou ˆ[[:upper:]][5-9].$

Chaîne composée de trois caractères : le premier est une majuscule, le deuxième un chiffre compris entre 5 et 9, le dernier un caractère quelconque.

Exemples de correspondance :

B6a

Z5*

7images/symbol.PNG[0-79]A*

Chaîne contenant le caractère 7, suivi d’une espace...

Caractères spécifiques aux ERb

Caractère spécial

Signification

Caractères de répétition

\{m\}

m fois le caractère précédent

\{m,\}

Au moins m fois le caractère précédent

\{m,n\}

Entre m et n fois le caractère précédent

Divers

\(ERb\)

Mémorisation d’une ERb

\1, \2, ...

Rappel de mémorisation

Dans les ERb, le caractère "\" donne une signification spéciale aux parenthèses et accolades.

Exemple

|[0-9]\{5\}|

Chaîne contenant un nombre à 5 chiffres entouré par deux barres verticales.

Exemple de correspondance :

route de Vaux|89000|Auxerre

|38350|La Mure

Des exemples de substitution sont donnés au chapitre La commande sed.

Caractères spécifiques aux ERe

Caractère spécial

Signification

Caractères de répétition

?

0 ou 1 fois le caractère ou regroupement précédent

+

1 à n fois le caractère ou regroupement précédent

{m}

m fois le caractère précédent

{m,}

Au moins m fois le caractère précédent

{m,n}

Entre m et n fois le caractère précédent

Divers

(er1)

Regroupement

er1|er2|er3

Alternatives

Dans les ERe, les accolades et parenthèses perdent leur signification spéciale si elles sont précédées d’un antislash.

Exemples

ER

Signification

ˆ[+-]?[0-9]+$

Chaîne représentant un nombre entier (au moins 1 chiffre) éventuellement précédé d’un signe (0 ou 1 fois).

Exemples de correspondance :

2

-56

+235

789654

\|[0-9]{5}\|

Chaîne contenant un nombre à cinq chiffres entouré par deux barres verticales.

Exemples de correspondance :

route de Vaux|89000|Auxerre

|38350|La Mure

\{[0-9]{2}\}$

Chaîne se terminant par deux chiffres entourés par deux accolades.

Exemples de correspondance :

note1{23}

{78}

ˆtruc|chose$

Chaîne commençant par "truc" ou finissant par "chose".

ˆ(truc|chose)+$

Chaîne composée de 1 à n occurrences de "truc" ou de "chose".

Exemples de correspondance :

truc

chose

trucchosetruc

chosechose

Exploitation des expressions régulières par les commandes

1. La commande vi

Les ERb sont utilisables dans l’éditeur vi pour la recherche et la substitution de chaînes de caractères.

Syntaxe

Recherche (mode commande) :

/ERb 

Substitution (mode ex) :

:[adresse[,adresse]]s/ERB/expression-de-remplacement/[flags] 

Des exemples de substitution sont donnés au chapitre La commande sed qui utilise la même syntaxe que l’éditeur vi.

2. La commande grep

Cette section illustre l’utilisation des expressions régulières au travers de la commande grep normalisée par POSIX. Utilisée avec l’option -E, la commande comprend les expressions régulières étendues.

Syntaxe de base

grep [-iv...] expression-régulière-basique [ fic1 .... ] 
grep [-iv...] -E expression-régulière-étendue [ fic1 .... ] 

La commande grep utilisée avec l’option -E remplace la commande egrep. Pour les autres options, se reporter au manuel de la commande.

Exemples

Voici le fichier tel2.txt :

$ cat tel2.txt  
Joyeux Giselle|12. rue de la Source|89290|Vaux|03.45.26.28.47 
Dehaut Olivier|3 rue de Pussenval|75020|Paris|01.78.25.96.78 
 
Karama Josette|256 rue de la tempete|56100|Lorient|02.85.26.45.58 
 
Zanouri Joel|45/48 boulevard du Gard|56100|lorient|02/85/56/45/58 
 
 
Gron Pierre|89-90 rue du chateau|38350|La Mure|04.78.21.23.69 
Grival Zoe|3, rue du chateau|38350|La Mure|04.78.21.78.69 
 
$ 

Recherche de la chaîne "lorient" en majuscules ou minuscules :

$ grep -i 'lorient' tel2.txt 
Karama Josette|256 rue de la tempete|56100|Lorient|02.85.26.45.58 
Zanouri Joel|45/48 boulevard du Gard|56100|Lorient|02/85/56/45/58 
$ 

Recherche des lignes commençant par la lettre ’K’ :

$ grep 'ˆK' tel2.txt 
Karama Josette|256...

Exercices

Les fichiers fournis pour les exercices sont disponibles dans le répertoire dédié au chapitre sous l’arborescence Exercices/fichiers.

1. Expressions régulières

a. Exercice 1 : expressions régulières avec vi

Soit le fichier expr.txt :

$ cat expr.txt  
philip          10 bd du Maine                       01.10.11.11.11 
annie2          25/27 rue Victor Hugo                01.10.48.22.48 
fun             20 impasse Marechal Leclerc          01.30.22.33.33 
christie        rue des petits champs                01/20/45/78/52 
chris                                                01.40.22.33.44 
hugues          48 impasse Maréchal Leclerc          01.30.22.53.48 
XincX           45 bd Lafayette                      01.15.45.45.78 
annie2          25 rue Victor Hugo                   01.10.48.22.48 
XhristiX        35/36 rue des petits champs          01/20/54/58/45 
 
 
 
XarinetX        rue des petits champs                01.20.54.58.65 

Effectuer les opérations suivantes avec l’éditeur vi (mode ex) sur le fichier expr.txt :

1.

Les numéros de téléphone qui se terminent par 48 doivent désormais se terminer par 50.

2.

Remplacer...