Section header image

Motifs basiques

Les expressions régulières sont des motifs que seules certaines commandes sont capables d'interpréter. Les expressions régulières peuvent être développées pour correspondre à certaines séquences de caractères dans le texte. Les exemples affichés sur cette page utilisent des expressions régulières pour démontrer leur puissance lorsqu'elles sont utilisées avec la commande grep. En outre, ces exemples fournissent une démonstration très visuelle du fonctionnement des expressions régulières, le texte qui correspond sera affiché en rouge.

Poursuivons

Utilisez la commande cd pour passer au répertoire Documents.

sysadmin@localhost:~$ cd ~/Documents                                                 

Les expressions régulières les plus simples n'utilisent que des caractères littéraux, comme l'exemple de la page précédente :

sysadmin@localhost:~/Documents$ grep sysadmin passwd                               
sysadmin:x:1001:1001:System Administrator,,,,:/home/sysadmin:/bin/bash

Caractères d'ancrage

Les caractères d'ancrage sont l'une des façons dont les expressions régulières peuvent être utilisées pour affiner les résultats de recherche. Par exemple, la root du motif apparaît plusieurs fois dans le fichier /etc/passwd :

sysadmin@localhost:~/Documents$ grep 'root' passwd
root:x:0:0:root:/root:/bin/bash                                                 
operator:x:1000:37::/root:

Pour éviter que le shell ne les interprète en tant que caractères spéciaux de shell, ces motifs doivent être protégés par des guillemets simples.

Le premier caractère d'ancrage ^ est utilisé pour s'assurer qu'un motif apparaît au début de la ligne. Par exemple, pour trouver toutes les lignes dans /etc/passwd qui commencent par root, utilisez le pattern ^ root. Notez que ^ doit être le premier caractère du motif pour fonctionner.

sysadmin@localhost:~/Documents$ grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash

Pour l'exemple suivant, examinez d'abord le fichier alpha-first.txt. La commande cat peut être utilisée pour afficher le contenu d'un fichier :

sysadmin@localhost:~/Documents$ cat alpha-first.txt                             
A is for Animal                                                                 
B is for Bear                                                                   
C is for Cat                                                                    
D is for Dog                                                                    
E is for Elephant                                                               
F is for Flower

Le deuxième caractère d'ancrage $ peut être utilisé pour s'assurer qu'un motif apparaît à la fin de la ligne, limitant ainsi efficacement les résultats de la recherche. Pour trouver les lignes qui se terminent par un r dans le fichier alpha-first.txt, utilisez le motif r$ :

sysadmin@localhost:~/Documents$ grep 'r$' alpha-first.txt
B is for Bear
F is for Flower

Encore une fois, la position de ce caractère est importante, le $ doit être le dernier caractère du motif pour être efficace comme ancre.

Faire correspondre un caractère unique avec .

Les exemples suivants utilisent le fichier red.txt :

sysadmin@localhost:~/Documents$ cat red.txt
red
reef
rot
reeed
rd
rod
roof
reed
root
reel
read

L'une des expressions les plus utiles est le point ., car iI correspondra à n'importe quel caractère sauf pour le caractère de nouvelle ligne. Le motif r..f trouvera n'importe quelle ligne contenant la lettre r suivie de exactement deux caractères (qui peut être n'importe quel caractère sauf un saut de ligne), puis la lettre f :

sysadmin@localhost:~/Documents$ grep 'r..f' red.txt
reef
roof

Le même concept peut être répété en utilisant d'autres combinaisons. Ce qui suit trouvera des mots de quatre lettres qui commencent par r et termine par d :

sysadmin@localhost:~/Documents$ grep 'r..d' red.txt
reed
read

Ce caractère peut être utilisé autant de fois que nécessaire. Pour trouver tous les mots qui ont au moins quatre caractères, le modèle suivant peut être utilisé :

sysadmin@localhost:~/Documents$ grep '....' red.txt                             
reef
reeed
roof                                                                            
reed
root
reel
read

La ligne ne doit pas nécessairement être une correspondance exacte, elle doit simplement contenir le motif, comme on le voit ici lorsque r..t est recherché dans le fichier /etc/passwd :

sysadmin@localhost:~/Documents$ grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:1000:37::/root:  

Faire correspondre un seul caractère avec []

Les crochets [] correspondent à un seul caractère de la liste ou de la plage de caractères possibles figurant entre crochets.

Par exemple, étant donné le fichier profile.txt :

sysadmin@localhost:~/Documents$ cat profile.txt
Hello my name is Joe.
I am 37 years old.
3121991
My favorite food is avocados.
I have 2 dogs.
123456789101112

Pour trouver toutes les lignes du profile.txt qui contiennent un nombre, utilisez le modèle [0123456789] ou [0-9] :

sysadmin@localhost:~/Documents$ grep '[0-9]' profile.txt
I am 37 years old.
3121991
I have 2 dogs.
123456789101112

D'un autre côté, pour trouver toutes les lignes qui contiennent des caractères non numériques, insérez un ^ comme premier caractère à l'intérieur des crochets. Ce caractère exclut les caractères listés :

sysadmin@localhost:~/Documents$ grep '[^0-9]' profile.txt
Hello my name is Joe.
I am 37 years old.
My favorite food is avocados.
I have 2 dogs.

Veuillez noter :

Ne pas confondre [^0-9] avec des lignes qui ne contiennent pas de chiffres. Il correspond en fait aux lignes qui contiennent des non-nombres. Regardez le fichier original pour voir la différence. Les troisième et sixième lignes ne contiennent que des nombres, elles ne contiennent pas de non-nombres, de sorte que ces lignes ne correspondent pas.

Lorsque d'autres caractères d'expression régulière sont placés entre crochets, ils sont traités comme des caractères littéraux. Par exemple, le point . correspond normalement à n'importe quel caractère, mais placé à l'intérieur des crochets, il correspondra simplement à lui-même. Dans l'exemple suivant, seules les lignes qui contiennent le point . sont listées.

sysadmin@localhost:~/Documents$ grep '[.]' profile.txt
Hello my name is Joe.
I am 37 years old.
My favorite food is avocados.
I have 2 dogs.

Faire correspondre un caractère ou des motifs répétés avec *

Le caractère d'expression régulière * est utilisé pour faire correspondre zéro ou plusieurs occurrences d'un caractère ou d'un motif le précédant. Par exemple, e * correspond à zéro ou plusieurs occurrences de la lettre e :

sysadmin@localhost:~/Documents$ cat red.txt
red
reef
rot
reeed
rd
rod
roof
reed
root
reel
read
sysadmin@localhost:~/Documents$ grep 're*d' red.txt
red
reeed
rd
reed

Il est également possible de faire correspondre zéro ou plusieurs occurrences d'une liste de caractères en utilisant les crochets. Le motif [oe] * utilisé dans l'exemple suivant correspond à zéro ou plusieurs occurrences du caractère o ou du caractère e :

sysadmin@localhost:~/Documents$ grep 'r[oe]*d' red.txt
red
reeed
rd
rod
reed

Lorsqu'il est utilisé avec un seul autre caractère, * n'est pas très utile. L'un des modèles suivants correspond à toutes les chaînes ou ligne du fichier: .* e* b* z*.

sysadmin@localhost:~/Documents$ grep 'z*' red.txt
red
reef
rot
reeed
rd
rod
roof
reed
root
reel
read
sysadmin@localhost:~/Documents$ grep 'e*' red.txt
red
reef
rot
reeed
rd
rod
roof
reed
root
reel
read

C'est parce que * peut correspondre à zéro occurrences d'un motif. Pour rendre le * utile, il est nécessaire de créer un motif qui comprend plus que le seul caractère précédant *. Par exemple, les résultats ci-dessus peuvent être affinés en ajoutant un autre e pour que le motif ee * corresponde efficacement à chaque ligne contenant au moins un e.

sysadmin@localhost:~/Documents$ grep 'ee*' red.txt
red
reef
reeed
reed
reel
read

Entrée standard

Si un nom de fichier n'est pas donné, la commande grep sera lue à partir de l'entrée standard, qui provient normalement du clavier avec l'entrée fournie par l'utilisateur qui exécute la commande. Cela fournit une expérience interactive avec grep où l'utilisateur tape dans les filtres d'entrée et grep au fur et à mesure. N'hésitez pas à l'essayer, appuyez simplement sur Ctrl-D lorsque vous êtes prêt à revenir à l'invite.

Poursuivons

Utilisez la commande cd suivante pour revenir au répertoire personnel :

sysadmin@localhost:~/Documents$ cd ~
Linux est Open Source, ce qui le rend extrêmement polyvalent ! Objets connecté, Big Data, cloud computing, cybersécurité, mise en réseau, etc.

« Linux est Open Source, ce qui le rend extrêmement polyvalent! Internet des objets, Big Data, cloud computing, DevOps, cybersécurité, mise en réseau, gestion des données, etc. »


reed                                                                            
root                                                                            
reel                                                                            
read                                                                            
sysadmin@localhost:~/Documents$ grep 'r..f' red.txt                             
reef                                                                            
roof                                                                            
sysadmin@localhost:~/Documents$ grep '...' red.txt                              
red                                                                             
reef                                                                            
rot                                                                             
reeed                                                                           
rod                                                                             
roof                                                                            
reed                                                                            
root                                                                            
reel                                                                            
read                                                                            
sysadmin@localhost:~/Documents$ grep '^r..t' passwd                             
root:x:0:0:root:/root:/bin/bash                                                 
sysadmin@localhost:~/Documents$ grep 'r..t' passwd                              
root:x:0:0:root:/root:/bin/bash                                                 
operator:x:1000:37::/root:                                                      
sysadmin@localhost:~/Documents$                                                 
M