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! Internet des objets, Big Data, cloud computing, DevOps, cybersécurité, mise en réseau, gestion des données, etc. »