Faire correspondre des motifs avec les expressions régulières basiques
Dans cette étape, vous explorerez comment utiliser les expressions régulières basiques (BRE) avec grep pour créer des motifs de recherche plus flexibles. Dans les BRE, certains caractères, appelés métacaractères, ont des significations spéciales qui vont au-delà de leur valeur littérale. Cela vous permet de rechercher des motifs, et pas seulement des chaînes de caractères fixes.
Nous allons explorer deux métacaractères fondamentaux : * (astérisque) et . (point).
Examinons d'abord l'astérisque (*). Ce métacaractère correspond au caractère qui le précède immédiatement, présent zéro, une ou plusieurs fois. Pour voir cela en action, exécutez la commande suivante. Nous entourerons le motif de guillemets simples ('roo*') pour nous assurer que le shell le traite comme un motif littéral et n'essaie pas d'interpréter * comme un joker de fichier.
grep 'roo*' /etc/passwd
La sortie affichera probablement plusieurs lignes :
root:x:0:0:root:/root:/bin/bash
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
rtkit:x:108:113:RealtimeKit,,,:/proc:/usr/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
Analysons ce résultat. Le motif 'roo*' recherche les lignes contenant ro suivi de zéro ou plusieurs o.
- La ligne
root correspond car elle contient roo (ro suivi d'un o).
- La ligne
proxy correspond car elle contient ro (ro suivi de zéro o) dans "proxy".
- La ligne
systemd-timesync correspond car elle contient ro dans "Synchronization".
- La ligne
rtkit correspond car elle contient ro dans "proc".
- La ligne
operator correspond car elle contient ro à la fois dans "operator" et "/root".
Regardons maintenant le métacaractère point (.). Le point correspond à n'importe quel caractère unique. Exécutez la commande suivante pour voir comment son comportement diffère :
grep 'ro.' /etc/passwd
Cette fois, la sortie montre plusieurs correspondances :
root:x:0:0:root:/root:/bin/bash
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
rtkit:x:108:113:RealtimeKit,,,:/proc:/usr/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
Le motif 'ro.' recherche les lignes contenant ro suivi d'exactement un caractère, quel qu'il soit.
- La ligne
root correspond car ro est suivi de o dans "root".
- La ligne
proxy correspond car ro est suivi de x dans "proxy".
- La ligne
systemd-timesync correspond car ro est suivi de n dans "Synchronization".
- La ligne
rtkit correspond car ro est suivi de c dans "proc".
- La ligne
operator correspond car ro est suivi d'un autre caractère dans "operator" et "/root".
En comparant les sorties, vous pouvez clairement voir la puissance des expressions régulières. Les deux motifs 'roo*' et 'ro.' correspondent à plusieurs lignes, démontrant comment différents métacaractères vous permettent d'affiner vos recherches de différentes manières.