Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
In Linux Dernière mise à jour : 31 juillet 2023
Partager sur:
Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

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
grep -w argumentation

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.

Pour effectuer une recherche insensible à la casse, utilisez grep avec le -i argument.

$ grep -i ‘tech’ tech.txt
argument grep -i

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.

Pour afficher toutes les lignes qui ne contiennent pas un motif donné, vous devrez utiliser le -v argument.

$ grep -v ‘tech’ tech.txt
argument grep -v

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. 

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!
fichiers journaux de recherche récursive grep

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
mot littéral correspond grep regex

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
grep regex bash utilisateurs actuels

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
ancre grep caret

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
ancre dollar grep

Vous pouvez également combiner les symboles ^ et $. Regardons l'exemple ci-dessous.

$ grep “^From \| technology.$” tech.txt
grep caret dollar

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
grep exemple de regroupement

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
grep recherche alternative

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”
chaîne de recherche grep

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
grep capturant des groupes

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
exemple de classe de caractères grep digit
$ grep [[:alpha:]] tech.txt
exemple de classe de caractères alphabétiques grep
$ grep [[:xdigit:]] tech.txt
exemple de classe de caractères grep xdigit

# 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.)

quantificateurs grep

# 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
expression régulière étendue

# 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
Exemple d'e-mail PCRE

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
Date du PCRE

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 ».

Capture d'écran d'un fichier journal.

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.

  • Nitish Singh
    Auteur
    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
Merci à nos commanditaires
Plus de bonnes lectures sur Linux
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation de travail tout-en-un pour vous aider à gérer les projets, les tâches, le travail, les ventes, le CRM, les opérations, workflowset plus encore.
    Essayez Monday
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder