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.
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.
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.
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.
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.
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.
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
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.
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.
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
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
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
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 :
-A
et un certain nombre de lignes à afficher après un match : grep -A 3 phoenix sample
- cette commande imprime trois lignes après le match.-B
et un certain nombre de lignes à afficher avant un match : grep -B 2 phoenix sample
- cette commande imprime deux lignes avant le match.-C
et un certain nombre de lignes pour afficher avant et après le match : grep -C 2 phoenix sample
- cette commande imprime deux lignes avant et après le match.
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
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.