Utiliser grep sur des fichiers correspondant à des critères spécifiques
La commande Grep (impression d'expression régulière globale) correspond et recherche le modèle spécifique dans les expressions régulières. Cette commande filtre et recherche un modèle particulier de caractères et les affiche en sortie. Elle est considérée comme l'une des commandes les plus utiles sur les systèmes de type Unix/Linux pour les administrateurs système et les développeurs.
Linux contient différents types de commandes et d'utilitaires pour simplifier chaque tâche. Contrairement à d'autres systèmes d'exploitation, trouver n'importe quel fichier sous Linux est simple car vous pouvez utiliser la commande grep pour rechercher n'importe quel fichier.
Vous pouvez utiliser la commande grep pour afficher le nom du fichier spécifique contenant un modèle particulier que vous recherchez. Cependant, vous devez suivre certaines choses lorsque vous utilisez la commande grep sous Linux -
Grep est une commande sensible à la casse par défaut. ,C'est pourquoi vous devez utiliser l'option -i pour faire correspondre le modèle insensible à la casse.
Vous devez utiliser des guillemets dans la commande grep pour rechercher un caractère ayant une signification particulière pour le shell.
-
La commande Grep affiche la ligne entière contenant le caractère spécifique. Vous devez donc utiliser l'option -o uniquement pour afficher le nom du fichier et le caractère recherché.
Dans ce petit guide, nous utiliserons un grep sur les fichiers qui correspondent à des critères spécifiques sous Linux.
Utilisation de Grep sur des fichiers correspondant à des critères spécifiques sous Linux
La commande grep est préinstallée dans la plupart des distributions Linux. Créons quelques exemples de fichiers dans le répertoire « Documents » et faisons correspondre une chaîne ou une expression régulière dans ces fichiers.
~$: sudo tree Documents
Documents
|__ sample1
|__ sample2
|__ sample3
0 directories, 3 files
Nous allons maintenant rechercher ces exemples de fichiers via les différentes options de la commande grep sous Linux.
Faire correspondre la recherche sensible à la casse sur les fichiers
Il fait l'objet d'une recherche sensible à la casse si vous devez trouver des mots et des modèles exacts à l'aide de grep sur des fichiers.
grep <pattern> <filename1> <filename2>.....
Ici, nous rechercherons le mot « unix » parmi tous les fichiers du répertoire Documents.
Pour cela, utilisez la commande ci-dessous -
~$: grep unix sample1 sample2 sample3
sample1:unix
sample3:unix operating system
La commande ci-dessus correspond au modèle mentionné et affiche les fichiers contenant "unix".
Faire correspondre la recherche insensible à la casse sur les fichiers
Vous pouvez rechercher n'importe quel modèle de manière insensible en utilisant l'option -i avec la commande ci-dessus -
grep -i <pattern> <filename1> <filename2>.....
Affichons tous les résultats liés à « Unix », mais le terminal affichera tous les fichiers contenant « Unix » ou « Unix ».
~$: grep -i "unix" sample1 sample2 sample3
sample1:unix
sample1:Unix
sample2:Unix
sample3:unix operating system
Rechercher uniquement le modèle correspondant
La commande grep affiche l'intégralité du paragraphe ou de la ligne par défaut. Vous pouvez afficher uniquement le modèle au lieu du passage ou de la ligne entière en utilisant l'option -o avec la commande grep.
grep -o "<pattern>" <filename>
Ici, nous allons rechercher "Linux" via la commande grep et son option -o -
~$: grep -o "Linux" sample1 sample3
sample1:Linux
Recherche des noms de fichiers correspondant au modèle
Si vous souhaitez rechercher des fichiers contenant un modèle ou une chaîne spécifique, utilisez la commande suivante -
grep -l "<pattern>" <filename1> <filename2>.....
Ou,
grep -l "<pattern>" *
Par exemple, la commande ci-dessous affichera le nom du fichier dans le répertoire actuel contenant le mot "linux" -
~$: grep -l "linux" *
sample1
sample3
Correspondant à n'importe quel modèle
Utilisez la commande grep suivante pour afficher des caractères spécifiques correspondant à n'importe quel mot, modèle, etc. dans les fichiers.
grep "..<letter_pattern>" <filename>
Ici, la commande ci-dessous affiche à la fois les modèles « Linux » et « Unix », qui se terminent par « x ».
~$: grep "..x" sample1 sample3
sample2:Linux
sample2:Linux
sample2:Unix
sample3:linux
sample3:unix operating system.
Faire correspondre le modèle d'inversion
Vous ne pouvez faire correspondre que les lignes qui ne sont pas similaires au motif mentionné. Dans ce cas, vous pouvez utiliser l'option -v avec la commande grep comme suit -
grep -v "<pattern>" <filename>
Par exemple, nous rechercherons les fichiers qui ne contiennent pas le mot « Linux ».
~$: grep -v "Linux" sample1 sample2 sample3
sample1:GNU operating system
sample1:gnu
sample1:Gnu
sample:unix
sample1:linux
sample1:unix
sample2:GNU
sample2:unix
sample3:linux
sample3:unix operating system.
sample3:gnu operating system.
Faire correspondre le modèle qui commence par un mot/une chaîne spécifique
Le modèle d'expression régulière '^' définit le début d'un passage ou d'une ligne. À l'aide de la commande grep suivante, vous pouvez afficher les lignes commençant par un modèle ou une chaîne spécifique.
grep "^<pattern>" <filename>
Dans la commande suivante, nous utiliserons la commande grep pour rechercher "gnu" dans les fichiers -
~$: grep "^gnu" sample2 sample3
sample3:gnu operating system.
Faire correspondre le modèle qui se termine par un mot/une chaîne spécifique
Le modèle d'expression régulière '$' définit la fin d'un passage/d'une ligne. En utilisant cette expression avec la commande grep, vous pouvez faire correspondre les lignes ou les passages qui se terminent par le modèle/mot mentionné.
grep "<pattern>$" <filename>
Par exemple, nous rechercherons "système" dans plusieurs fichiers -
~$: grep "system$" sample1 sample2 sample3
sample3:unix operating system.
sample3:gnu operating system.
Correspondance récursive pour un modèle dans le répertoire
Si vous souhaitez faire correspondre un modèle dans l'ensemble du répertoire au lieu de fichiers spécifiques dans le répertoire, vous pouvez utiliser l'option -R avec la commande grep comme ceci -
grep -R <pattern> <directory>
Maintenant, nous allons exécuter la commande grep de manière récursive pour rechercher les fichiers contenant "GNU" dans le répertoire Documents -
~$: grep -R GNU Documents
Documents/sample2:GNU
Documents/sample1:GNU operating system
Astuce bonus - Si vous souhaitez faire correspondre un modèle spécifique parmi tous les fichiers présents dans le répertoire actuel, vous pouvez le faire en utilisant l'option -w avec la commande grep comme suit -
grep -w <pattern> *
Faire correspondre des fichiers avec des extensions spécifiques
Utilisez la commande suivante pour rechercher un modèle dans les fichiers avec une extension spécifique inclus dans un répertoire
grep -R --include=*.<file_extention> '<pattern>' <directory>
Dans l'exemple ci-dessous, la commande grep vérifie le modèle mentionné uniquement dans les fichiers portant l'extension « .txt ».
~$: grep -R --include=*.txt 'Linux' Documents
Documents/sample1.txt:Linux is a kernel
Remarque - Vous pouvez également utiliser la commande ci-dessus pour faire correspondre les modèles dans les fichiers avec plusieurs extensions à la fois.
Conclusion
La commande grep est un excellent moyen de filtrer des fichiers avec des modèles spécifiques via le terminal sous Linux. Dans ce guide, nous avons expliqué les moyens de faire correspondre des critères spécifiques dans des fichiers à travers divers exemples. L'utilisation de la commande grep est très simple, et vous pouvez également le voir à travers certains des exemples ci-dessus. Ainsi, vous pouvez utiliser la commande grep pour rechercher n'importe quel modèle, ligne, mot, etc. sous Linux en quelques clics.