Si vous utilisez Linux depuis un certain temps, vous connaissez déjà grep - Global Regular Expression Print, un outil de traitement de texte que vous pouvez utiliser pour rechercher des fichiers et des répertoires. Il est très utile entre les mains d'un utilisateur expérimenté de Linux. Cependant, l'utiliser sans regex peut limiter ses capacités.
Mais qu'est-ce que Regex ?
Regex est une expression régulière que vous pouvez utiliser pour améliorer la fonctionnalité de recherche grep. Regex, par définition, est un modèle de filtrage de sortie avancé. Avec la pratique, vous pouvez utiliser regex efficacement, car vous pouvez également l'utiliser avec d'autres commandes Linux.
Dans notre didacticiel, nous apprendrons à utiliser efficacement Grep et Regex.
Prérequis
L'utilisation de grep avec regex nécessite une bonne connaissance de Linux. Si vous êtes débutant, consultez notre Guides Linux.
Vous devez également avoir accès à un ordinateur portable ou à un ordinateur exécutant le système d'exploitation Linux. Vous pouvez utiliser n'importe quel Distribution Linux de votre choix. Et, si vous avez une machine Windows, vous pouvez toujours utiliser Linux avec WSL2. Découvrez notre version détaillée ici.
L'accès à la ligne de commande/terminal vous permet d'exécuter toutes les commandes fournies dans notre tutoriel grep/regex.
De plus, vous devez également avoir accès à un ou plusieurs fichiers texte dont vous aurez besoin pour exécuter les exemples. J'ai utilisé ChatGPT pour générer un mur de texte, lui disant d'écrire sur la technologie. L'invite que j'ai utilisée est comme ci-dessous.
"Générez 400 mots sur la technologie. Il devrait inclure la plupart des technologies. Assurez-vous également de répéter les noms des technologies dans le texte. »
Une fois le texte généré, je l'ai copié-collé et enregistré dans le fichier tech.txt, que nous utiliserons tout au long du didacticiel.
Enfin, une compréhension de base de la commande grep est indispensable. Vous pouvez vérifier 16 exemples de commandes grep pour rafraîchir vos connaissances. Nous présenterons également brièvement la commande grep pour vous aider à démarrer.
Syntax and Examples of grep Command
Les grep la syntaxe de la commande est simple.
$ grep -options [regex/pattern] [files]
Comme vous pouvez le constater, il attend un modèle et la liste des fichiers que vous souhaitez exécuter la commande.
Il existe de nombreuses options grep disponibles qui modifient ses fonctionnalités. Ceux-ci inclus:
- - je: ignorer les cas
- -r : faire une recherche récursive
- -w : effectuer une recherche pour ne trouver que des mots entiers
- -v : afficher toutes les lignes qui ne correspondent pas
- -n : afficher tous les numéros de ligne correspondants
- -l : imprimer les noms de fichiers
- -Couleur: sortie de résultat colorée
- -c : affiche le nombre de correspondances pour le modèle utilisé
# 1. Rechercher un mot entier
Vous devrez utiliser l'argument -w avec grep pour une recherche par mot entier. En l'utilisant, vous ignorez toutes les chaînes qui correspondent au modèle donné.
$ grep -w ‘tech\|5G’ tech.txt

Comme vous pouvez le voir, la commande aboutit à une sortie dans laquelle elle recherche deux mots, "5G" et "tech", dans tout le texte. Il les marque ensuite de couleur rouge.
Ici, le | le symbole pipe est échappé afin que grep ne le traite pas comme un métacaractère.
# 2. Recherche insensible à la casse
Pour effectuer une recherche insensible à la casse, utilisez grep avec le -i argument.
$ grep -i ‘tech’ tech.txt

La commande recherche toute instance insensible à la casse de la chaîne "tech", qu'il s'agisse d'un mot complet ou d'une partie de celui-ci.
# 3. Effectuez une recherche de ligne non correspondante
Pour afficher toutes les lignes qui ne contiennent pas un motif donné, vous devrez utiliser le -v argument.
$ grep -v ‘tech’ tech.txt

La sortie affiche toutes les lignes qui ne contiennent pas le mot "technologie.” Vous verrez également des lignes vides. Ces lignes sont les lignes qui suivent un paragraphe.
# 4. Faire une recherche récursive
Pour effectuer une recherche récursive, utilisez la -r dispute avec grep.
$ grep -R ‘error\|warning’ /var/log/*.log
#output
/var/log/bootstrap.log:2023-01-03 21:40:18 URL:http://ftpmaster.internal/ubuntu/pool/main/libg/libgpg-error/libgpg-erro 0_1.43-3_amd64.deb [69684/69684] -> "/build/chroot//var/cache/apt/archives/partial/libgpg-error0_1.43-3_amd64.deb" [1]
/var/log/bootstrap.log:dpkg: warning: parsing file '/var/lib/dpkg/status' near line 5 package 'dpkg':
/var/log/bootstrap.log:dpkg: warning: parsing file '/var/lib/dpkg/status' near line 5 package 'dpkg':
/var/log/bootstrap.log:dpkg: warning: parsing file '/var/lib/dpkg/status' near line 24 package 'dpkg':
/var/log/bootstrap.log:dpkg: warning: parsing file '/var/lib/dpkg/status' near line 24 package 'dpkg':
/var/log/bootstrap.log:dpkg: warning: ignoring pre-dependency problem!

La commande grep recherche de manière récursive deux mots, « erreur » et « avertissement », dans le répertoire /var/log. Il s'agit d'une commande pratique pour connaître les avertissements et les erreurs dans les fichiers journaux.
Grep and Regex: What it is and Examples
Comme nous travaillons avec regex, vous devez savoir que regex offre trois options de syntaxe. Ceux-ci inclus:
- Expressions régulières de base (BRE)
- Expressions régulières étendues (ERE)
- Expressions régulières compatibles Pearl (PCRE)
La commande grep utilise BRE comme option par défaut. Donc, si vous souhaitez utiliser d'autres modes regex, vous devrez les mentionner. La commande grep traite également les métacaractères tels qu'ils sont. Ainsi, si vous utilisez des métacaractères tels que ?, +, ), vous devrez les échapper avec la commande antislash (\).
La syntaxe de grep avec regex est la suivante.
$ grep [regex] [filenames]
Voyons grep et regex en action avec les exemples ci-dessous.
# 1. Correspondances de mots littéraux
Pour faire une correspondance de mots littéraux, vous devrez fournir une chaîne en tant que regex. Après tout, un mot est aussi une regex.
$ grep "technologies" tech.txt

De même, vous pouvez également utiliser des correspondances littérales pour rechercher les utilisateurs actuels. Pour cela, courez,
$ grep bash /etc/passwd
#output
root:x:0:0:root:/root:/bin/bash
nitt:x:1000:1000:,,,:/home/nitt:/bin/bash

Cela affiche les utilisateurs qui peuvent accéder au bash.
# 2. Correspondance d'ancre
La correspondance des ancres est une technique utile pour les recherches avancées utilisant des caractères spéciaux. Dans regex, il existe différents caractères d'ancrage que vous pouvez utiliser pour représenter des positions spécifiques dans un texte. Ceux-ci inclus:
- »^' caret : Le signe insertion correspond au début de la chaîne ou de la ligne d'entrée et recherche une chaîne vide.
- »Symbole dollar $ : Le symbole dollar correspond à la fin de la chaîne ou de la ligne d'entrée et recherche une chaîne vide.
Les deux autres caractères d'ancrage correspondants incluent la limite de mot '\ b' et la limite de non-mot '\ B'.
- Limite de mot '\ b' : Avec \b, vous pouvez affirmer la position entre un mot et un caractère non-mot. En termes simples, il vous permet de faire correspondre des mots complets. De cette façon, vous pouvez éviter les correspondances partielles. Vous pouvez également l'utiliser pour remplacer des mots ou compter les occurrences de mots dans une chaîne.
- \B limite de non-mot : C'est l'opposé de \b limite de mot dans regex car il affirme une position qui n'est pas entre deux mots ou des caractères non-mot.
Passons en revue des exemples pour avoir une idée claire.
$ grep ‘^From’ tech.txt

L'utilisation du caret nécessite d'entrer le mot ou le motif dans la casse correcte. C'est parce qu'il est sensible à la casse. Donc, si vous exécutez la commande suivante, elle ne renverra rien.
$ grep ‘^from’ tech.txt
De même, vous pouvez utiliser le symbole $ pour trouver la phrase qui correspond à un modèle, une chaîne ou un mot donné.
$ grep ‘technology.$' tech.txt

Vous pouvez également combiner les symboles ^ et $. Regardons l'exemple ci-dessous.
$ grep “^From \| technology.$” tech.txt

Comme vous pouvez le voir, la sortie contient des phrases commençant par "De" et des phrases se terminant par "technologie".
# 3. regroupement
Si vous cherchez à rechercher plusieurs modèles à la fois, vous devrez utiliser le groupement. Il vous aide à créer de petits groupes de caractères et de motifs que vous pouvez traiter comme une seule unité. Par exemple, vous pouvez créer un groupe (tech) qui inclut le terme « t », « e », « c », « h ».
Pour avoir une idée claire, regardons un exemple.
$ grep 'technol\(ogy\)\?' tech.txt

Avec le regroupement, vous pouvez faire correspondre des modèles répétés, capturer des groupes et rechercher des alternatives.
Recherche alternative avec regroupement
Voyons un exemple de recherche alternative.
$ grep "\(tech\|technology\)" tech.txt

Si vous souhaitez effectuer une recherche sur une chaîne, vous devrez la transmettre avec le symbole pipe. Voyons cela dans l'exemple ci-dessous.
$ echo “tech technological technologies technical” | grep "\(tech\|technology\)"
#output
“tech technological technologies technical”

Groupes de capture, groupes de non-capture et motifs répétés
Et qu'en est-il des groupes capturants et non capturants ?
Vous devrez créer un groupe dans l'expression régulière et le transmettre à la chaîne ou à un fichier pour capturer des groupes.
$ echo 'tech655 tech655nical technologies655 tech655-oriented 655' | grep "\(tech\)\(655\)"
#output
tech655 tech655nical technologies655 tech655-oriented 655

Et, pour les groupes sans capture, vous devrez utiliser le ?: entre parenthèses.
Enfin, nous avons des motifs répétés. Vous devrez modifier l'expression régulière pour vérifier les modèles répétés.
$ echo ‘teach tech ttrial tttechno attest’ | grep '\(t\+\)'
#output
‘teach tech ttrial tttechno attest’
Ici, la regex recherche une ou plusieurs instances du caractère 't'.
# 4. Classes de caractères
Avec les classes de caractères, vous pouvez facilement écrire des expressions regex. Ces classes de caractères utilisent carré supports. Certaines des classes de personnages bien connues incluent:
- [:chiffre:] – 0 à 9 chiffres
- [:alpha:] – caractères alphabétiques
- [:alnum:] - caractères alphanumériques
- [:inférieur:] - minuscules
- [:supérieur:] - lettres capitales
- [:xchiffre:] – chiffres hexadécimaux, y compris 0-9, AF, af
- [:Vide:] – caractères blancs tels que tabulation ou espace
Etc!
Vérifions quelques-uns d'entre eux en action.
$ grep [[:digit]] tech.txt

$ grep [[:alpha:]] tech.txt

$ grep [[:xdigit:]] tech.txt

# 5. Quantificateurs
Les quantificateurs sont des métacaractères et sont au cœur de regex. Ceux-ci vous permettent de faire correspondre les apparences exactes. Regardons-les ci-dessous.
- * → Zéro ou plusieurs correspondances
- + → une ou plusieurs correspondances
- ? → Zéro ou un match
- {X} → x correspondances
- {X, } → x ou plusieurs correspondances
- {x, z} → de x à z correspondances
- {,z} → jusqu'à z correspondances
$ echo ‘teach tech ttrial tttechno attest’ | grep -E 't+'
#output
‘teach tech ttrial tttechno attest’
Ici, il recherche le 't ' instances de caractères pour une ou plusieurs correspondances. Ici -E signifie regex étendu (dont nous parlerons plus tard.)

# 6. Expression régulière étendue
Si vous n'aimez pas ajouter des caractères d'échappement dans le modèle de regex, vous devez utiliser une regex étendue. Il supprime la nécessité d'ajouter des caractères d'échappement. Pour ce faire, vous devrez utiliser le drapeau -E.
$ grep -E 'in+ovation' tech.txt

# 7. Utilisation de PCRE pour effectuer des recherches complexes
PCRE (Perl Compatible Regular Expression) vous permet de faire bien plus que d'écrire des expressions de base. Par exemple, vous pouvez écrire "\d" qui dénote [0-9].
Par exemple, vous pouvez utiliser PCRE pour rechercher des adresses e-mail.
echo "Contact me at nitish@newdomain.com" | grep -P "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b"
#output
Contact me at nitish@newdomain.com

Ici, PCRE s'assure que le motif correspond. De même, vous pouvez également utiliser un modèle PCRE pour vérifier les modèles de date.
$ echo "The Sparkain site launched on 2023-07-29" | grep -P "\b\d{4}-\d{2}-\d{2}\b"
#output
The Sparkain site launched on 2023-07-29

La commande trouve la date dans AAAA-MM-JJ format. Vous pouvez également le modifier pour qu'il corresponde à un autre format de date.
# 8. Alternance
Si vous souhaitez des correspondances alternatives, vous pouvez utiliser les caractères d'échappement (\|).
$ grep -L ‘warning\|error’ /var/log/*.log
#output
/var/log/alternatives.log
/var/log/bootstrap.log
/var/log/dpkg.log
/var/log/fontconfig.log
/var/log/ubuntu-advantage.log
/var/log/upgrade-policy-changed.log
La sortie répertorie les noms de fichiers contenant « avertissement » ou « erreur ».

Mot de la fin
Cela nous amène à la fin de notre guide grep et regex. Vous pouvez utiliser grep avec regex de manière intensive pour affiner les recherches. Avec une utilisation correcte, vous pouvez gagner beaucoup de temps et aider à automatiser de nombreuses tâches, surtout si vous les utilisez pour écrire des scripts ou utilisez la regex pour effectuer des recherches dans le texte.
Ensuite, consultez questions et réponses fréquemment posées lors des entretiens Linux.
-
Je suis un écrivain certifié C1 Advanced (CEFR) avec une maîtrise en informatique (niveau B de NIELIT, Inde) avec sept ans d'expérience en rédaction. Mon expérience comprend la rédaction pour le Web et la couverture de divers sujets, notamment Web3,… lire la suite