Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Linux et Mise en réseau Dernière mise à jour : 24 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

grep, développé à l'origine pour les systèmes Unix, est l'un des utilitaires de ligne de commande les plus utilisés dans les boîtes Linux

Son nom provient d'une autre commande similaire de l'outil ed, à savoir g/re/p, qui signifie rechercher globalementune expression régulièreet imprimer leslignes correspondantes. grep recherche essentiellement un motif donné ou une expression régulière dans l'entrée ou le fichier standard et imprime les lignes qui correspondent aux critères donnés. Il est souvent utilisé pour filtrer les détails inutiles tout en imprimant uniquement les informations requises dans de gros fichiers journaux

La puissance de l'expression régulière combinée aux options supportées par grep rend cela possible

Nous allons couvrir ici quelques-unes des commandes grep les plus couramment utilisées dans différents scénarios par les administrateurs système ou les développeurs

Commençons donc... 👨‍💻

syntaxe de la commande grep

la commande grep attend un motif et des arguments facultatifs, ainsi qu'une liste de fichiers si elle est utilisée sans piping

grep <x><x>[options]</x></x> motif [fichiers]

Un exemple simple est le suivant : $ grep my file.txt

$ grep mon fichier.txt
mon_fichier

$

Recherche dans plusieurs fichiers

grep vous permet de rechercher un motif donné non seulement dans un, mais aussi dans plusieurs fichiers. Voici comment vous pouvez rechercher un motif dans plusieurs fichiers en utilisant le caractère générique *

$ sudo grep -i err /var/log/messages*

Résultat

$ sudo grep err /var/log/messages*
/var/log/messages:Dec 28 10:36:52 centos7vm kernel : ACPI : Using IOAPIC for interrupt routing
/var/log/messages:Dec 28 10:36:52 centos7vm kernel : ACPI : PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel : ACPI : PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel : ACPI : PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages:Dec 28 10:36:52 centos7vm kernel : ACPI : PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel : ACPI : Using IOAPIC for interrupt routing
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel : ACPI : PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel : ACPI : PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel : ACPI : PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel : ACPI : PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel : BERT : Le support de la table d'enregistrement des erreurs de démarrage est désactivé. Activez-le en utilisant bert_enable comme paramètre du noyau.
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel : ACPI : PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel : ACPI : PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel : ACPI : PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel : ACPI : PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11)
/var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel : BERT : Le support de la table d'enregistrement des erreurs de démarrage est désactivé. Activez-le en utilisant bert_enable comme paramètre du noyau.
/var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel : [drm:vmw_host_log <x>[vmwgfx]</x>] *ERROR* Failed to send host log message.
/var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel : [drm:vmw_host_log <x>[vmwgfx]</x>]

*

ERROR* Échec de l'envoi du message du journal de l'hôte.

$
Vous pouvez observer dans la sortie ci-dessus que le nom du fichier est affiché en premier avant d'afficher la ligne correspondante pour indiquer où grep a trouvé le motif donné

Recherche insensible à la casse

grep permet de rechercher un motif sans tenir compte de la casse. Utilisez l'option -i pour indiquer à grep d'ignorer la casse

grep -i <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Résultat

$ grep -i it fichier_texte.txt
Il s'agit d'un exemple de fichier texte. Il contient les fonctionnalités de
. Vous pouvez toujours utiliser grep avec n'importe quel
type de données, mais il fonctionne mieux avec les données textuelles.
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
Ceci est un exemple de fichier texte.

Il est

 répété deux fois.

$

Recherche de mots entiers

Il n'est pas toujours nécessaire d'obtenir une correspondance partielle, mais plutôt d'attendre de grep qu'il trouve un mot complet. Vous pouvez le faire avec l'option -w

grep -w <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Résultat

$ grep -w is fichier_texte.txt
Ceci est un exemple de fichier texte. Il contient
Ceci est un exemple de fichier texte.

Il est

 répété deux fois.

$

Vérifier le nombre de correspondances

Parfois, au lieu d'obtenir la ligne correspondante, nous avons besoin du nombre de correspondances réussies faites par grep. Nous pouvons obtenir ce nombre en utilisant l'option -c

grep -c <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Résultat

$ grep -c is text_file.txt

2


$

Recherche dans les sous-répertoires

Il est souvent nécessaire de rechercher des fichiers non seulement dans le répertoire de travail actuel, mais aussi dans les sous-répertoires. grep vous permet de le faire facilement avec l'option -r

grep -r <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> *

Résultat

$ grep -r Hello *
dir1/file1.txt:Hello One
dir1/file2.txt:Hello Two
dir1/file3.txt:Hello Three

$
Comme vous pouvez le constater, grep parcourt chaque sous-répertoire à l'intérieur du répertoire courant et répertorie les fichiers et les lignes pour lesquels une correspondance a été trouvée

Recherche inverse

Si vous souhaitez trouver quelque chose qui ne correspond pas à un motif donné, grep vous permet de le faire à l'aide de l'option -v

grep -v <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Résultat

$ grep This text_file.txt
Ceci est un exemple de fichier texte. Il contient
Ceci est un exemple de fichier texte. Il est répété deux fois.
$ grep -v This text_file.txt
plusieurs lignes à utiliser dans le cadre du test de la fonctionnalité de grep
. Vous pouvez toujours utiliser grep avec
n'importe quel type de données, mais il fonctionne mieux avec les données textuelles.
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
les alphabets et les caractères spéciaux tels que - * #, etc.

$
Vous pouvez comparer la sortie de la commande grep sur le même motif et le même fichier avec et sans le drapeau -v. Avec -v, les lignes qui ne correspondent pas au motif sont imprimées

Imprimer les numéros de ligne

grep vous permet d'imprimer les numéros de ligne avec les lignes imprimées, ce qui permet de savoir facilement où se trouve la ligne dans le fichier. Utilisez l'option -n comme indiqué pour obtenir les numéros de ligne dans la sortie

grep -n <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Résultat

$ grep -n This text_file.txt
1:Ceci est un exemple de fichier texte. Il contient
7:Ceci est un exemple de fichier texte.

Il est

 répété deux fois.

$

Limiter la sortie de grep

Pour les gros fichiers comme les logs, etc., la sortie de grep peut être longue et vous pouvez avoir besoin d'un nombre fixe de lignes dans la sortie au lieu de tout comparer. Nous pouvons utiliser -m<x><x><x><x>[num]</x></x></x></x> pour limiter le nombre de lignes imprimées par num. Voici comment l'utiliser

grep -m<x><x><x><x>[num]</x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Remarquez comment l'utilisation de l'option -m affecte la sortie de grep pour le même ensemble de conditions dans l'exemple ci-dessous

$ grep It fichier_texte.txt
Il s'agit d'un exemple de fichier texte. Il contient
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
Il s'agit d'un exemple de fichier texte. Il est répété deux fois.
$ grep -m2 It text_file.txt
Ceci est un exemple de fichier texte.

Il

 contient
Il contient des nombres comme 1, 2, 3 etc. ainsi que

$

Afficher des lignes supplémentaires

Souvent, nous n'avons pas seulement besoin de lignes qui ont un motif correspondant, mais aussi de quelques lignes au-dessus ou au-dessous pour un meilleur contexte

Il est possible d'afficher une ligne au-dessus ou au-dessous (ou les deux) d'une ligne contenant un motif à l'aide de grep en utilisant les drapeaux -A, -B ou -C avec la valeur num. Ici, num indique le nombre de lignes supplémentaires à imprimer juste au-dessus ou au-dessous de la ligne correspondant au motif. Cela s'applique à toutes les correspondances que grep trouve dans le fichier ou la liste de fichiers spécifiés

grep -A<x><x><x><x>[num]</x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

OU
$

 grep -B<x><x><x><x>[num]</x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

OU
grep

-C<x><x><x><x>[</x></x></x></x>

num] [

 <x><x><x><x><x><x><x><x><x><x><x>motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier] $ grep -C[num] [motif] [fichier] $ grep -C[num] [motif] [fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

La sortie ci-dessous montre une sortie normale de grep ainsi qu'une sortie avec les drapeaux -A, -B et -C, l'un après l'autre. Remarquez comment grep interprète les drapeaux et leurs valeurs et les changements dans les sorties respectives. Avec l'indicateur -A1, grep imprime une ligne qui suit immédiatement la ligne correspondante

De même, avec l'indicateur -B1, il imprime une ligne juste avant la ligne correspondante. Avec l'option -C1, il affiche une ligne avant et après la ligne correspondante

$ grep numbers text_file.txt
Il prend en charge les nombres tels que 1, 2, 3 etc. ainsi que
$ grep -A1 numbers text_file.txt
Il prend en charge les nombres tels que 1, 2, 3 etc. ainsi que
les alphabets et les caractères spéciaux tels que - * # etc.
$ grep -B1 numbers text_file.txt
type de données mais il fonctionne mieux avec les données textuelles.
Il supporte les nombres comme 1, 2, 3 etc. ainsi que

$

 grep -C1 numbers text_file.txt
type de données mais il fonctionne mieux avec les données textuelles.
Il supporte les nombres comme 1, 2, 3 etc. ainsi que
les alphabets et les caractères spéciaux comme - * # etc.

$

Liste des noms de fichiers

Pour afficher uniquement le nom des fichiers dans lesquels un motif a été trouvé au lieu des lignes correspondantes, utilisez l'option -l

grep -l <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Voici un exemple d'exécution

$ grep -l su *.txt
file.txt
text_file.txt

$

Imprimer les lignes exactes

Parfois, nous avons besoin d'imprimer les lignes qui correspondent exactement à un motif donné, et non à une partie de celui-ci. grep permet d'utiliser l'option -x pour faire cela

grep -x <x><x><x><x><x><x><x><x><x><x><x>[motif]</x></x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Dans l'exemple ci-dessous, le fichier.txt contient une ligne avec un seul mot "support" et, en tant que tel, il est traité par grep avec l'option -x tout en ignorant les lignes qui peuvent contenir les mots "support" avec d'autres textes

grep -x support *.txt
file.txt:support

$

Correspondance avec la chaîne de départ

En utilisant des expressions régulières, nous pouvons trouver une chaîne de caractères au début d'une ligne. Voici comment procéder

grep <x><x>[options]</x></x> "^<x>[chaîne de caractères]</x>" <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Exemple

$ grep It fichier_texte.txt
Il s'agit d'un exemple de fichier texte. Il contient
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
Ceci est un exemple de fichier texte.

Il est

 répété deux fois.

$

 grep ^It text_file.txt
Il contient des nombres comme 1, 2, 3, etc. ainsi que

$
Observez comment l'utilisation du caractère ^ modifie la sortie. ^ indique le début de la chaîne et grep a trouvé ^It comme toute ligne commençant par le mot It. L'utilisation de guillemets peut s'avérer utile lorsque le motif contient des espaces, etc

Correspondance avec la chaîne de fin

Une autre expression régulière souvent utile consiste à faire correspondre le motif de fin de ligne

grep <x><x>[options]</x></x> "<x>[chaîne]</x>$" <x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Exemple

$ grep "\." fichier_texte.txt
Il s'agit d'un exemple de fichier texte. Il contient les fonctionnalités de
. Vous pouvez toujours utiliser grep avec n'importe quel
type de données, mais il fonctionne mieux avec les données textuelles.
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
les alphabets et les caractères spéciaux tels que - * #, etc.
Il s'agit d'un exemple de fichier texte. Il est répété deux fois.
$ grep "\N$" text_file.txt
type de données mais il fonctionne mieux avec les données textuelles.
alphabets et caractères spéciaux comme - * # etc.
Ceci est un exemple de fichier texte.

Il est

 répété deux fois.

$
Nous avons essayé de faire correspondre le caractère . à la fin de la ligne. Puisque le point (.) est un caractère spécial, nous devons l'échapper avec le caractère \. Remarquez à nouveau que la sortie varie lorsque nous nous contentons de faire correspondre le caractère . et lorsque nous utilisons $ pour demander à grep de ne faire correspondre que les lignes qui se terminent par . (et non celles qui peuvent contenir le caractère n'importe où entre les deux)

Utiliser un fichier de motifs

Il peut arriver que vous ayez une liste complexe de motifs que vous utilisez souvent. Au lieu de l'écrire à chaque fois, vous pouvez spécifier une liste de motifs dans un fichier et l'utiliser avec l'option -f. Le fichier doit contenir un motif par ligne

grep -f [fichier_motif] [fichier_à_correspondre]

Dans notre exemple, nous avons créé un fichier de motifs nommé pattern .txt avec le contenu ci-dessous

$ cat pattern.txt
Ceci
Cela

$
Pour l'utiliser, utilisez l'option -f

grep -f pattern.txt text_file.txt
Il s'agit d'un exemple de fichier texte. Il contient
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
Ceci est un exemple de fichier texte.

Il est

 répété deux fois.

$


Spécifier plusieurs motifs

grep permet de spécifier plusieurs motifs à l'aide de l'option -e

grep -e [motif1] -e [motif2] -e [motif3]...<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Exemple

$ grep -e is -e It -e to text_file.txt
Il s'agit d'un exemple de fichier texte. Il contient
plusieurs lignes à utiliser dans le cadre du test de grep
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
Voici un exemple de fichier texte.

Il est

 répété deux fois.

$

Spécifiez un RegEx étendu

grep prend également en charge les expressions régulières étendues (ERE) en utilisant le drapeau -E. Cette fonction est similaire à la commande egrep sous Linux

L'utilisation de l'ERE présente un avantage lorsque vous souhaitez traiter les métacaractères tels quels et ne pas les remplacer par des chaînes de caractères comme le fait grep. Cela vous donne plus de flexibilité en termes d'échappement comme nous sommes obligés de le faire dans le cas de grep. Ceci étant dit, l'utilisation de -E avec grep est équivalente à la commande egrep

$ grep -E '[Extended RegEx]'<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[fichier]</x></x></x></x></x></x></x></x></x></x></x></x></x></x>

Voici une utilisation d'ERE où nous voulons imprimer les lignes qui ne sont pas commentées ou vides. C'est particulièrement utile pour trouver quelque chose dans de gros fichiers de configuration. J'ai également utilisé le drapeau -v pour NE PAS afficher les lignes correspondant au motif '^(#|$)'

$ sudo grep -vE '^(#|$)' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Sous-système sftp /usr/libexec/openssh/sftp-server

$

Conclusion

Les exemples ci-dessus ne sont que la partie émergée de l'iceberg. grep prend en charge toute une série d'options et peut être un outil très utile dans les mains d'une personne qui sait comment l'utiliser efficacement. Nous pouvons non seulement utiliser les exemples donnés ci-dessus, mais aussi les combiner de différentes manières pour obtenir ce dont nous avons besoin

Reportez-vous à sa page de manuel pour en savoir plus

$ man grep

Ensuite, découvrez des exemples de commandes SFTP.

  • Abhishek Nair
    Auteur
Merci à nos sponsors
D'autres bonnes lectures sur Linux
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le 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, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus