Table of Contents

Commande grep sous Linux/UNIX

Grep est un acronyme qui signifie Global Regular Expression Print.

Grep est un outil en ligne de commande Linux/Unix utilisé pour rechercher une chaîne de caractères dans un fichier spécifié. Le modèle de recherche de texte est appelé une expression régulière. Lorsqu'il trouve une correspondance, il imprime la ligne avec le résultat. La commande grep est pratique lors de la recherche dans de gros fichiers journaux.

La commande grep est très flexible avec de nombreux opérateurs et options utiles. En combinant les commandes grep, on peut obtenir des résultats puissants et trouver le texte dans des milliers de fichiers.

Ce guide détaille les commandes grep les plus utiles pour les systèmes Linux/Unix.

Une ligne ne représente pas une ligne de texte telle qu'elle apparaît sur l'écran du terminal. Une ligne dans un fichier texte est une séquence de caractères jusqu'à ce qu'un saut de ligne soit introduit. La sortie des commandes grep peut contenir des paragraphes entiers à moins que les options de recherche ne soient affinées.

Utilisation de la commande grep

La commande grep se compose de trois parties dans sa forme la plus basique. La première partie commence par grep, suivi du motif de recherche. Après la chaîne vient le nom de fichier dans lequel le grep recherche.

La syntaxe de commande grep la plus simple ressemble à ceci :

grep phoenixNAP sample

La commande peut contenir de nombreuses options, variations de modèle et noms de fichiers. Combiner autant d'options que nécessaire pour obtenir les résultats dont on a besoin. On trouvera ci-dessous les commandes grep les plus courantes avec des exemples.

Grep est sensible à la casse. Il faut utiliser la casse correcte lors de l'exécution des commandes grep.

Rechercher un fichier

Pour imprimer n'importe quelle ligne d'un fichier contenant un motif de caractères spécifique, dans notre cas phoenix dans le fichier sample2, exécuter la commande :

grep phoenix sample2

Grep affichera chaque ligne où il y a une correspondance pour le mot phoenix. Lors de l'exécution de cette commande, on n'obtiens pas de correspondances exactes. Au lieu de cela, le terminal imprime les lignes avec des mots contenant la chaîne de caractères que vous avez saisie. Voici un exemple:

grep phoenix sample2

phoneix number2
phoenixNAP number2

Si le modèle de recherche comprend des caractères autres qu'alphanumériques, utiliser des guillemets. Cela inclut les espaces vides ou tout autre symbole.

Rechercher plusieurs fichiers

Pour rechercher plusieurs fichiers avec la commande grep, insérer les noms de fichiers danslesquels on souhaite rechercher, séparés par un espace.

La commande grep pour faire correspondre le mot phoenix dans trois fichiers sample, sample2 et sample3 ressemble à cet exemple :

grep phoenix sample sample2 sample3

Le terminal imprime le nom de chaque fichier qui contient les lignes correspondantes et les lignes réelles qui incluent la chaîne de caractères requise.

grep phoenix sample sample2 sample3

sample:phoneix number1
sample:phoenixNAP number1
sample2:phoneix number2
sample2:phoenixNAP number2
sample3:phoneix number3
sample3:phoenixNAP number3

On peut ajouter autant de noms de fichiers que nécessaire. Le terminal imprime une nouvelle ligne avec le nom de fichier pour chaque correspondance trouvée dans les fichiers répertoriés.

On peut utiliser xargs avec grep pour rechercher une chaîne dans la liste des fichiers.

Rechercher tous les fichiers dans le répertoire

Pour rechercher tous les fichiers dans le répertoire actuel, utiliser un astérisque au lieu d'un nom de fichier à la fin d'une commande grep.

Dans cet exemple, on utilise nix comme critère de recherche :

grep nix *

La sortie affiche le nom du fichier avec nix et renvoie la ligne entière.

Rechercher des mots entiers uniquement

Grep permet de rechercher et d'imprimer les résultats pour des mots entiers uniquement. Pour rechercher le mot phoenix dans tous les fichiers du répertoire courant, ajouter -w à la commande grep.

grep -w phénix *

Cette option n'imprime que les lignes avec des correspondances de mots entiers et les noms des fichiers dans lesquels elle les a trouvées :

grep phoenix sample sample2 sample3

sample:phoneix number1
sample2:phoneix number2
sample3:phoenix number3

Lorsque -w est omis, grep affiche le motif de recherche même s'il s'agit d'une sous-chaîne d'un autre mot.

Ignorer la casse dans les recherches Grep

Comme les commandes grep sont sensibles à la casse, l'un des opérateurs les plus utiles pour les recherches grep est -i. Au lieu d'imprimer uniquement les résultats en minuscules, le terminal affiche à la fois les résultats en majuscules et en minuscules. La sortie comprend des lignes avec des entrées de casse mixtes.

Un exemple de cette commande :

grep -i phoenix *

Si nous utilisons l'opérateur -i pour rechercher des fichiers dans le répertoire courant pour phoenix, la sortie ressemble à ceci :

grep -i phoenix *

sample:Phoneix number
sample:phoneix number
sample:PHOENIX number
sample2:Phoneix number2
sample2:phoneix number2
sample2:PHOENIX number2
sample3:Phoneix number3
sample3:phoneix number3
sample3:PHOENIX number3

Rechercher des sous-répertoires

Pour inclure tous les sous-répertoires dans une recherche, ajouter l'opérateur -r à la commande grep.

grep -r phénix *

Cette commande imprime les correspondances pour tous les fichiers du répertoire actuel, les sous-répertoires et le chemin exact avec le nom de fichier.

Recherche grep inverse

On peut utiliser grep pour imprimer toutes les lignes qui ne correspondent pas à un modèle de caractères spécifique. Pour inverser la recherche, ajouter -v à une commande grep.

Pour exclure toutes les lignes contenant phoenix, saisir :

grep -v phoenix sample 

Le terminal imprime toutes les lignes qui ne contiennent pas le mot utilisé comme critère de recherche. Utiliser -i pour ignorer la casse afin d'exclure complètement le mot

grep -i phoenix *

sample:Phoneix number
sample:phoneix number
sample:PHOENIX numbert utilisé pour cette recherche.

Rechercher les lignes qui correspondent exactement à une chaîne de recherche

La commande grep imprime des lignes entières lorsqu'elle trouve une correspondance dans un fichier. Pour imprimer uniquement les lignes qui correspondent complètement à la chaîne de recherche, ajouter l'option -x.

grep -x "phoenix number3" *

La sortie affiche uniquement les lignes avec la correspondance exacte. S'il y a d'autres mots ou caractères dans la même ligne, le grep ne l'inclut pas dans les résultats de la recherche. Ne pas oublier d'utiliser des guillemets chaque fois qu'il y a un espace ou un symbole dans un motif de recherche.

Voici une comparaison des résultats sans et avec l'opérateur -x dans la commande grep :

grep "phoenix number3" *

sample3:phoneix number3 test1
sample3:phoneix number3 test2
sample3:phoenix number3
grep -x "phoenix number3" *

sample3:phoenix number3

Lister les noms des fichiers correspondants

Parfois, on n'a pas besoin de voir que les noms des fichiers qui contiennent un mot ou une chaîne de caractères et excluent les lignes réelles. Pour imprimer uniquement les noms de fichiers qui correspondent à la recherche, utiliser l'opérateur -l :

grep -l phoenix *

Exemple comment trouver des fichiers qui contiennent un mot ou une chaîne de caractères à l'exclusion des lignes réelles

La sortie affiche les noms de fichiers exacts qui contiennent phoenix dans le répertoire actuel mais n'affiche pas les lignes avec le mot correspondant :

Pour rappel, utiliser l'opérateur de recherche récursive -r pour inclure tous les sous-répertoires dans votre recherche.

grep -l phoenix  *

sample
sample2
sample3

Compter le nombre de correspondances

Grep peut afficher les noms de fichiers et le nombre de lignes où il trouve une correspondance pour un mot.

Utiliser l'opérateur -c pour compter le nombre de correspondances :

grep -c phoenix *

exemple de grep comptant le nombre total de correspondances d'une recherche

grep -c phoenix *

sample:2
sample2:2
sample3:2

Afficher le nombre de lignes avant ou après une chaîne de recherche

Parfois, on a besoins de plus de contenu dans les résultats de recherche pour décider ce qui est le plus pertinent.

Utilisez les opérateurs suivants pour ajouter les lignes souhaitées avant, après une correspondance ou les deux :

Afficher les numéros de ligne avec les correspondances grep

Lorsque grep imprime les résultats avec de nombreuses correspondances, il est pratique de voir les numéros de ligne. Ajouter l'opérateur -n à n'importe quelle commande grep pour afficher les numéros de ligne.

On va rechercher Phoenix dans le répertoire actuel, afficher deux lignes avant et après les matchs avec leurs numéros de ligne.

grep -n -C 2 Phoenix sample

1 We house a world class, completely interconnected
2 ecosystem of Bandwidth, network and telecom service providers
3 Phoenix number1
4 Our clients tust us to support
5 the security and high availability of

Limiter la sortie grep à un nombre fixe de lignes

Les fichiers individuels, tels que les fichiers journaux, peuvent contenir de nombreuses correspondances pour les modèles de recherche grep. Limiter le nombre de lignes dans la sortie grep en ajoutant l'option -m et un nombre à la commande.

grep -m2 Phoenix sample

Dans ce cas, le terminal affiche les deux premières correspondances qu'il trouve dans le fichier sample.

Si on ne spécifie pas de fichier et recherche tous les fichiers dans un répertoire, la sortie imprime les deux premiers résultats de chaque fichier avec le nom de fichier qui contient les correspondances.