16 exemples de commandes grep pour vous aider dans le monde réel
Publié: 2021-02-23grep, développé à l'origine pour les systèmes basés sur Unix, est l'un des utilitaires de ligne de commande les plus utilisés dans les machines Linux.
Son nom vient d'une autre commande similaire dans l'outil ed, c'est-à-dire g / re / p qui signifie rechercher globalement une expression régulière et imprimer les lignes correspondantes. grep recherche essentiellement un modèle donné ou une expression régulière à partir d'une entrée standard ou d'un fichier 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 à partir de gros fichiers journaux.
La puissance de l'expression régulière combinée aux options prises en charge dans grep rend cela possible.
Ici, nous couvrirons certaines des commandes grep couramment utilisées dans différents scénarios par l'administrateur système ou le développeur.
Alors, commençons…
Syntaxe de la commande grep
La commande grep attend un modèle et des arguments facultatifs ainsi qu'une liste de fichiers si elle est utilisée sans tuyauterie.
$ grep [options] pattern [files]
Un exemple simple est :
$ grep my file.txt my_file $
Recherche de plusieurs fichiers
grep vous permet de rechercher le modèle donné non seulement dans un mais plusieurs fichiers. Voici comment rechercher un modèle dans plusieurs fichiers en utilisant le caractère générique *
.
$ sudo grep -i err /var/log/messages*
Production:
$ 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: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter. /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: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter. /var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message. /var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message. $
Vous pouvez observer à partir de la sortie ci-dessus que le nom de fichier est imprimé en premier avant d'imprimer la ligne correspondante pour indiquer où grep
a trouvé le motif donné.
Recherche insensible à la casse
grep propose de rechercher un motif sans regarder la casse du motif. Utilisez l'indicateur -i
pour indiquer à grep d'ignorer la casse.
$ grep -i [pattern] [file]
Production:
$ grep -i it text_file.txt This is a sample text file. It contains functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Recherche par mot entier
Ce n'est pas toujours que nous voulons une correspondance partielle, mais plutôt que grep ne corresponde qu'à un mot complet. Vous pouvez le faire avec le drapeau -w
.
$ grep -w [pattern] [file]
Production:
$ grep -w is text_file.txt This is a sample text file. It contains This is a sample text file. It's repeated two times. $
Vérifier le nombre de correspondances
Parfois, au lieu de la ligne correspondante réelle, nous avons simplement besoin du nombre de correspondances réussies effectuées par grep. Nous pouvons obtenir ce nombre en utilisant l'option -c
.
$ grep -c [pattern] [file]
Production:
$ grep -c is text_file.txt 2 $
Rechercher dans les sous-répertoires
Il est souvent nécessaire de rechercher des fichiers non seulement dans le répertoire de travail actuel, mais également dans des sous-répertoires. grep vous permet de le faire facilement avec le drapeau -r
.
$ grep -r [pattern] *
Production:
$ 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 d'un répertoire courant et répertorie les fichiers et les lignes où une correspondance est trouvée.
Recherche inversée
Si vous voulez trouver quelque chose qui ne correspond pas à un motif donné, grep permet de le faire avec l'indicateur -v
.
$ grep -v [pattern] [file]
Production:
$ grep This text_file.txt This is a sample text file. It contains This is a sample text file. It's repeated two times. $ grep -v This text_file.txt several lines to be used as part of testing grep functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $
Vous pouvez comparer la sortie de la commande grep
sur le même modèle et le même fichier avec et sans l'indicateur -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 des 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 [pattern] [file]
Production:
$ grep -n This text_file.txt 1:This is a sample text file. It contains 7:This is a sample text file. It's repeated two times. $
Limiter la sortie de grep
Pour les gros fichiers comme les journaux, etc., la sortie de grep peut être longue et vous aurez peut-être simplement besoin d'un nombre fixe de lignes dans la sortie au lieu de tout faire correspondre. Nous pouvons utiliser – m[num]
pour limiter les lignes imprimées par num. Voici comment l'utiliser :
$ grep -m[num] [pattern] [file]
Remarquez comment l'utilisation de l'indicateur -m
affecte la sortie de grep pour le même ensemble de conditions dans l'exemple ci-dessous :
$ grep It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $ grep -m2 It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as $
Afficher des lignes supplémentaires
Souvent, nous n'avons pas seulement besoin des lignes qui ont un motif correspondant, mais de quelques lignes au-dessus ou en dessous pour un meilleur contexte.

Il est possible d'imprimer une ligne au-dessus ou en dessous (ou les deux) d'une ligne ayant un motif en utilisant grep en utilisant les drapeaux -A
, -B
ou -C
avec une valeur num
. Ici, num
désigne le nombre de lignes supplémentaires à imprimer qui est juste au-dessus ou en dessous de la ligne correspondante. Cela s'applique à toutes les correspondances trouvées par grep dans le fichier ou la liste de fichiers spécifiés.
$ grep -A[num] [pattern] [file]
OU
$ grep -B[num] [pattern] [file]
OU
$ grep -C[num] [pattern] [file]
La sortie ci-dessous montre une sortie grep normale ainsi qu'une sortie avec les drapeaux -A
, -B
et -C
un par un. Remarquez comment grep interprète les drapeaux et leurs valeurs et les changements dans la sortie respective. Avec le drapeau -A1
, grep imprime 1 ligne qui suit juste après la ligne correspondante.
De même, avec le drapeau -B1
, il imprime 1 ligne juste avant la ligne correspondante. Avec le drapeau -C1
, il imprime 1 ligne qui est avant et après la ligne correspondante.
$ grep numbers text_file.txt It supports numbers like 1, 2, 3 etc. as well as $ grep -A1 numbers text_file.txt It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $ grep -B1 numbers text_file.txt kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as $ grep -C1 numbers text_file.txt kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $
Lister les noms de fichiers
Pour imprimer uniquement le nom des fichiers dans lesquels un motif est trouvé au lieu des lignes réellement correspondantes, utilisez l'indicateur -l
.
$ grep -l [pattern] [file]
Voici un exemple d'exécution :
$ grep -l su *.txt file.txt text_file.txt $
Imprimer les lignes exactes
Parfois, nous devons imprimer des lignes qui correspondent exactement à un motif donné, et non à une partie de celui-ci. grep permet à l'indicateur -x
de faire exactement cela.
$ grep -x [pattern] [file]
Dans l'exemple ci-dessous, file.txt contient une ligne avec un seul mot "support" et en tant que tel est mis en correspondance par grep avec l'indicateur -x
tout en ignorant les lignes qui peuvent contenir les mots "support" avec d'autres textes.
$ grep -x support *.txt file.txt:support $
Faire correspondre la chaîne de départ
En utilisant des expressions régulières, nous pouvons trouver une chaîne au début d'une ligne. Voici comment procéder.
$ grep [options] "^[string]" [file]
Exemple:
$ grep It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $ grep ^It text_file.txt It supports numbers like 1, 2, 3 etc. as well as $
Observez comment l'utilisation du caractère ^
modifie la sortie. ^
indique le début de la chaîne et grep correspond à ^It
comme toute ligne commençant par le mot It
. La mise entre guillemets peut aider lorsque le modèle contient des espaces, etc.
Chaîne de fin de correspondance
Une autre expression régulière utile courante consiste à faire correspondre la fin du motif de ligne.
$ grep [options] "[string]$" [file]
Exemple:
$ grep "\." text_file.txt This is a sample text file. It contains functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. This is a sample text file. It's repeated two times. $ grep "\.$" text_file.txt kind of data but it works best with text data. alphabets and special characters like - + * # etc. This is a sample text file. It's repeated two times. $
Nous avons essayé de faire correspondre un .
caractère en fin de ligne. Puisque le point (.) est un caractère de signification spécial, nous devons l'échapper avec le caractère \
. Encore une fois, notez comment la sortie varie lorsque nous faisons simplement correspondre .
caractère et lorsque nous utilisons $
pour demander à grep de ne faire correspondre que les lignes qui se terminent par .
(pas ceux qui peuvent en contenir n'importe où entre les deux).
Utiliser le fichier de signatures
Il peut y avoir des situations où vous avez une liste complexe de modèles que vous utilisez souvent. Au lieu de l'écrire à chaque fois, vous pouvez spécifier une liste de modèles dans un fichier et l'utiliser avec l'indicateur -f
. Le fichier doit contenir un motif par ligne.
$ grep -f [pattern_file] [file_to_match]
Dans notre exemple, nous avons créé des noms de fichier de modèle pattern.txt
avec le contenu ci-dessous :
$ cat pattern.txt This It $
Pour l'utiliser, utilisez l'indicateur -f
.
$ grep -f pattern.txt text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Spécifiez plusieurs motifs
grep permet de spécifier plusieurs modèles à l'aide de l'indicateur -e
.
$ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]
Exemple:
$ grep -e is -e It -e to text_file.txt This is a sample text file. It contains several lines to be used as part of testing grep It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Spécifier RegEx étendu
grep prend également en charge les expressions régulières étendues ou ERE en utilisant l'indicateur -E
. Ceci est similaire à la commande egrep
sous Linux.
L'utilisation d'ERE présente un avantage lorsque vous souhaitez traiter les méta-caractères tels quels et que vous ne souhaitez pas les remplacer par des chaînes comme grep. Cela vous donne plus de flexibilité pour les échapper comme nous sommes tenus de le faire dans le cas de grep. Cela étant dit, utiliser -E
avec grep équivaut à la commande egrep
.
$ grep -E '[Extended RegEx]' [file]
Voici une utilisation d'ERE où nous voulons imprimer des lignes qui ne sont pas commentées ou vides. Ceci est particulièrement utile pour trouver quelque chose dans les gros fichiers de configuration. J'ai également utilisé l'indicateur -v
pour NE PAS imprimer 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 Subsystem sftp /usr/libexec/openssh/sftp-server $
Conclusion
Les exemples ci-dessus ne sont que la pointe de l'iceberg. grep prend en charge une gamme d'options et peut être un outil très utile entre les mains d'une personne qui sait comment l'utiliser efficacement. Nous pouvons non seulement utiliser les exemples donnés ci-dessus, mais les combiner de différentes manières pour obtenir ce dont nous avons besoin.
Reportez-vous à sa page de manuel pour en savoir plus à ce sujet.
$ man grep
Ensuite, découvrez des exemples de commandes SFTP.