Grep, ou Global Regular Expression Print, est une commande Linux extrêmement utile pour trouver des modèles correspondants. Il peut parcourir les fichiers et les répertoires et lire également les entrées des commandes. Il recherche avec des expressions régulières ou des expressions régulières et imprime des lignes à partir d'un fichier qui correspond au modèle donné.
Dans cet article, nous verrons comment utiliser la commande Grep sous Linux. Les commandes décrites ici ont été testées sur Ubuntu 20.04. Les mêmes commandes Grep fonctionnent également pour Debian, Mint, Fedora et CentOS.
Installation de la commande grep
La plupart des distributions Linux, y compris Ubuntu 20.04 LTS, sont livrées avec grep installé. Si Grep n'est pas installé sur votre système, vous pouvez l'installer à l'aide de la commande ci-dessous dans Terminal :
$ Sudo apt-get install grep
Syntaxe de la commande grep
La syntaxe de base de la commande Grep est la suivante :
$ grep [options] PATTERN [FILE...]
Utilisation de la commande Grep
Rechercher un mot dans un fichier
Avec Grep, vous pouvez rechercher n'importe quel mot dans un fichier spécifique. La syntaxe serait :
$ grep <word> <filename>
Par exemple, la commande ci-dessous recherchera le mot "Donuts" dans le fichier "Donuts.txt".
$ grep Donuts Donuts.txt
Rechercher un mot dans plusieurs fichiers
Vous pouvez également rechercher un mot spécifique dans plusieurs fichiers.
$ grep <word> <filename1> < filename2>
Par exemple, la commande ci-dessous recherchera le mot "Donuts" à la fois dans "Donuts.txt" et "cakes.txt".
$ grep Donuts Donuts.txt cakes.txt
Ignorer la casse
Grep effectue des recherches sensibles à la casse par défaut, cela signifie qu'il traite "Donut" et "donuts" différemment. Si nous exécutons à nouveau la commande ci-dessus avec "beignets", vous ne verrez aucune sortie cette fois.
$ grep donuts Donuts.txt
Pour ignorer la casse, vous devrez ajouter "-i ” à votre commande comme ceci :
$ grep –i <word> <filename>
Rechercher un fichier par extension dans un répertoire
Vous pouvez également rechercher un fichier dans un répertoire spécifique par son extension. Utilisez la syntaxe suivante pour ce faire :
$ ls ~/<directory> | grep .<file type>
Par exemple, pour trouver tous les fichiers ".jpeg" dans le dossier "Téléchargements", la commande serait :
$ ls ~/Downloads | grep .jpeg
Imprimer des lignes qui ne correspondent pas à un motif
Avec Grep, vous pouvez également imprimer les lignes qui ne correspondent pas à votre modèle en ajoutant "-v " à votre commande. Utilisez la syntaxe suivante pour ce faire :
$ grep -v <word> <filename>
Par exemple, la commande suivante imprimera toutes les lignes sauf celle qui contient le mot "Donuts".
Imprimer uniquement le mot correspondant
Par défaut, grep imprime toute la ligne contenant le motif. Pour imprimer uniquement le mot correspondant, ajoutez "-o ” à votre commande.
$ grep -o <word> <filename>
Par exemple, la commande suivante n'imprimera que le mot "Donuts" au lieu d'imprimer la ligne entière du fichier "Donuts.txt".
Impression du numéro de ligne du motif et de la ligne correspondants
Par défaut, grep imprime toute la ligne contenant le motif. Pour imprimer à la fois le numéro de ligne et la ligne contenant le mot correspondant, ajoutez "-n ” à votre commande.
$ grep -n <word> <filename>
Par exemple, la commande suivante imprimera à la fois le numéro de ligne et la ligne contenant le mot "Donuts".
$ grep -n Donuts Donuts.txt
Imprimer des noms de fichiers qui correspondent à un modèle
Pour imprimer tous les fichiers de votre répertoire courant qui correspondent à votre modèle, utilisez la syntaxe suivante :
$ grep -l “<word>” *
Par exemple, la commande suivante imprimera tous les fichiers contenant le mot "Bonjour" :
$ grep -l “Hello” *
Imprimer le mot correspondant entier
Par défaut, grep imprime tous les mots qui correspondent à votre modèle, même s'ils font partie d'un mot. Regardez l'image ci-dessous.
Nous avons recherché la chaîne "faire " et peut voir toutes les lignes qui contiennent " do ”. Pour faire correspondre le mot exact, ajoutez "-w ” à votre commande.
$ grep –w <word> <filename>
Par exemple, pour rechercher le mot exact "do ” dans le fichier Donuts.txt, la commande serait :
$ grep -w do Donuts.txt
Comme vous pouvez le voir, il n'imprime plus que la ligne contenant le mot exact "faire ”.
Lignes correspondantes commençant par un mot particulier
Pour imprimer des lignes commençant par un mot particulier, ajoutez "^ ” à votre commande.
$ grep ^<word> <filename>
Par exemple, la commande suivante imprimera toutes les lignes commençant par "Th ”.
$ grep ^Th Donuts.txt
Lignes correspondantes qui se terminent par un motif
Pour imprimer des lignes qui se terminent par un motif particulier, ajoutez "$ ” à votre commande.
$ grep <word>$ <filename>
Par exemple, la commande suivante imprimera toutes les lignes qui se terminent par "t ”.
$ grep t$ Donuts.txt
Lignes correspondantes contenant certaines lettres
Si vous souhaitez rechercher des lignes contenant une ou plusieurs lettres, utilisez la syntaxe suivante :
$ grep “[<letters>]” <filename>
Par exemple, la commande suivante imprime toutes les lignes contenant une lettre de "a" à "f".
$ grep “[a-f]” Donuts.txt
Recherche récursive
Pour rechercher tous les fichiers d'un répertoire et d'un sous-répertoire pour un motif ou un mot particulier, utilisez :
$ grep -R <word> <path>
Par exemple, la commande suivante listera tous les fichiers contenant le mot "Bonjour" dans le répertoire Documents. Dans la sortie ci-dessous, vous pouvez voir les chemins d'accès aux fichiers avec les mots correspondants.
$ grep -R “Hello” /home/maryam/Documents
Imprimer des lignes spécifiques avant/après les mots correspondants
Par défaut, Grep imprime uniquement la ligne correspondant au modèle spécifique. Avec -A dans Grep, vous pouvez également inclure des lignes avant ou après les mots correspondants.
Imprimer des lignes après le match
Pour imprimer les lignes contenant les mots correspondants, y compris N nombre de lignes après les matchs :
$ grep -A <N> <word> <filename>
Par exemple, la commande suivante imprimera la ligne contenant le mot "enfer" avec 1 ligne après.
$ grep -A 1 hell Donuts.txt
Imprimer des lignes avant le match
Pour imprimer les lignes contenant les mots correspondants, y compris N nombre de lignes avant les matchs :
$ grep -B <N> <word> <filename>
Par exemple, la commande suivante imprimera la ligne contenant le mot "enfer" avec 1 ligne avant.
$ grep -B 1 hell Donuts.txt
Imprimer des lignes avant et après le match
Pour imprimer les lignes contenant les mots correspondants, y compris N nombre de lignes avant et après les matchs :
$ grep -C <N> <word> <filename>
Par exemple, la commande suivante imprimera la ligne contenant le mot "enfer" avec 1 ligne avant et après.
$ grep -C 1 hell Donuts.txt
Compter le nombre de matchs
Utilisation du -c option avec grep, vous pouvez compter les lignes qui correspondent à un modèle spécifique. N'oubliez pas qu'il ne correspondra qu'au nombre de lignes et non au nombre de mots correspondants.
$ grep -c <word> <filename>
Par exemple, la commande suivante imprime le nombre de lignes contenant le mot "Donuts".
$ grep -c Donuts Donuts.txt
Notez que notre fichier "Donuts.txt" contient 4 "Donuts", mais -c n'a imprimé que 3. Cela se produit car il compte le nombre de lignes au lieu du nombre de correspondances.
Pour plus d'informations sur grep, utilisez la commande ci-dessous :
$ grep --help
ou visitez la page de manuel en utilisant la commande ci-dessous :
$ man grep
Cela vous mènera à la page de manuel de Grep.
C'est tout ce qu'il y a à faire ! Dans cet article, nous avons expliqué la syntaxe de base et l'utilisation de la commande grep sous Linux. Nous avons également parcouru certaines options de ligne de commande pour étendre son utilité. Si vous connaissez d'autres utilisations de la commande Grep sous Linux que nous avons manquées, nous aimerions en savoir plus dans les commentaires ci-dessous.
Explorez cet article connexe pour découvrir comment vous pouvez trouver des fichiers et des répertoires sous Linux.