grep, développé à l’origine pour les systèmes Unix, est l’un des utilitaires de ligne de commande les plus utilisés sous Linux.
Son nom provient d’une autre commande similaire dans 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 et imprimer uniquement les informations nécessaires à partir de gros fichiers journaux.
La puissance de l’expression régulière combinée aux options prises en charge 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 optionnels 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 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 (Utilisation de IOAPIC pour le routage des interruptions)
/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 : La prise en charge de la table d'enregistrement des erreurs de démarrage est désactivée. 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* Échec de l'envoi du message du journal de l'hôte.
/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 propose 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 des
fonctionnalité. Vous pouvez toujours utiliser grep avec n'importe quel
avec n'importe quel type de données, mais c'est avec les données textuelles qu'il fonctionne le mieux.
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.
$
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
Il s'agit d'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’avoir la ligne correspondante, nous avons besoin du nombre de correspondances réussies que grep a faites. 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 fichier_texte.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 grâce à 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:Bonjour Deux
dir1/file3.txt:Bonjour Trois
$
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 où une correspondance est 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 fichier_texte.txt
Il s'agit d'un exemple de fichier texte. Il contient
Ceci est un exemple de fichier texte. Il est répété deux fois.
$ grep -v Ce fichier_texte.txt
plusieurs lignes à utiliser dans le cadre du test de la fonctionnalité grep
. Vous pouvez toujours utiliser grep avec n'importe quel
vous pouvez toujours utiliser grep avec n'importe quel type de données, mais c'est avec les données textuelles qu'il fonctionne le mieux.
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que les alphabets et les caractères spéciaux tels que - *
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 en 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 Ce fichier_texte.txt
1:Il s'agit d'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 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 faire correspondre. 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
Ceci est un exemple de fichier texte. Il est répété deux fois.
grep -m2 It fichier_texte.txt
Ceci est un exemple de fichier texte. Il contient
Il prend en charge les nombres tels que 1, 2, 3 etc. ainsi que
$
Afficher des lignes supplémentaires
Souvent, nous n’avons pas seulement besoin des 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>
OR
$ 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’option -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 nombres fichier_texte.txt
Il prend en charge les nombres tels que 1, 2, 3 etc. ainsi que
grep -A1 nombres fichier_texte.txt
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
ainsi que les alphabets et les caractères spéciaux comme - * # etc.
grep -B1 nombres fichier_texte.txt
le grep peut être utilisé pour tous les types 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
$ grep -C1 nombres fichier_texte.txt
type de données, mais c'est avec les données textuelles qu'il fonctionne le mieux.
Il prend en charge les nombres tels que 1, 2, 3, etc. ainsi que
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
fichier.txt
fichier_texte.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
Les expressions régulières permettent de 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]</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 fichier_texte.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
. Les guillemets peuvent être utiles 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 des
fonctionnalité. Vous pouvez toujours utiliser grep avec n'importe quel
avec n'importe quel type de données, mais c'est avec les données textuelles qu'il fonctionne le mieux.
Il prend en charge les nombres tels que 1, 2, 3, etc
alphabets et les caractères spéciaux comme - * # etc.
Voici un exemple de fichier texte. Il est répété deux fois.
$ grep "\N$" fichier_texte.txt
il peut s'agir de n'importe quel type de données, mais c'est avec les données textuelles qu'il fonctionne le mieux.
alphabets et caractères spéciaux comme - * # etc.
Voici 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. Comme le point (.) est un caractère spécial, nous devons l’échapper avec le caractère \
. Remarquez à nouveau que la sortie varie lorsque nous ne recherchons que le caractère .
et lorsque nous utilisons $
pour demander à grep de ne rechercher 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 motif.txt
Ceci
Il
$
Pour l’utiliser, utilisez l’option -f
.
$ grep -f motif.txt 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.
$
Spécifier plusieurs motifs
grep permet de spécifier plusieurs motifs à l’aide de l’indicateur -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 les mots-clés
Ceci est 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) à l’aide du drapeau -E.
Ceci 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. Ceci 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
Clé d'hôte /etc/ssh/ssh_host_rsa_key
Clé d'hôte /etc/ssh/ssh_host_ecdsa_key
Clé d'hôte /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication oui
ChallengeResponseAuthentication non
GSSAPIAuthentication oui
GSSAPICleanupCredentials non
UsePAM oui
X11Forwarding oui
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 un grand nombre d’options et peut s’avérer 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.