Photo avec l'aimable autorisation d'Alexôme
Vous devriez maîtriser la commande Linux grep.
Cela fait partie de la série en cours de 15 exemples, où 15 exemples détaillés seront fournis pour une commande ou une fonctionnalité spécifique. Plus tôt, nous avons discuté de 15 exemples pratiques pour la commande Linux find, l'historique de la ligne de commande Linux et la commande mysqladmin.
Dans cet article, passons en revue 15 exemples pratiques de la commande Linux grep qui seront très utiles aux débutants comme aux experts.
Créez d'abord le fichier demo_file suivant qui sera utilisé dans les exemples ci-dessous pour illustrer la commande grep.
$ cat demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. Two lines above this line is empty. And this is the last line.
1. Rechercher la chaîne donnée dans un seul fichier
L'utilisation de base de la commande grep consiste à rechercher une chaîne spécifique dans le fichier spécifié, comme indiqué ci-dessous.
Syntax: grep "literal_string" filename
$ grep "this" demo_file this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line.
2. Recherche de la chaîne donnée dans plusieurs fichiers.
Syntax: grep "string" FILE_PATTERN
Il s'agit également d'une utilisation de base de la commande grep. Pour cet exemple, copions le demo_file dans demo_file1. La sortie grep inclura également le nom du fichier devant la ligne correspondant au modèle spécifique, comme indiqué ci-dessous. Lorsque le shell Linux voit le méta-caractère, il effectue l'expansion et donne tous les fichiers en entrée à grep.
$ cp demo_file demo_file1 $ grep "this" demo_* demo_file:this line is the 1st lower case line in this file. demo_file:Two lines above this line is empty. demo_file:And this is the last line. demo_file1:this line is the 1st lower case line in this file. demo_file1:Two lines above this line is empty. demo_file1:And this is the last line.
3. Recherche insensible à la casse avec grep -i
Syntax: grep -i "string" FILE
C'est aussi une utilisation de base de grep. Ceci recherche la casse de chaîne/motif donnée de manière insensible. Ainsi, il correspond à tous les mots tels que "le", "LE" et "Le" cas insensible comme indiqué ci-dessous.
$ grep -i "the" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. And this is the last line.
4. Faire correspondre l'expression régulière dans les fichiers
Syntax: grep "REGEX" filename
Il s'agit d'une fonctionnalité très puissante, si vous pouvez utiliser efficacement les expressions régulières. Dans l'exemple suivant, il recherche tout le motif qui commence par "lignes" et se termine par "vide" avec tout ce qui se trouve entre les deux. c'est-à-dire pour rechercher des "lignes [quelque chose entre] vides" dans le demo_file.
$ grep "lines.*empty" demo_file Two lines above this line is empty.
D'après la documentation de grep :une expression régulière peut être suivie par l'un des nombreux opérateurs de répétition :
- ? L'élément précédent est facultatif et correspond au plus une fois.
- * L'élément précédent sera mis en correspondance zéro ou plusieurs fois.
- + L'élément précédent sera mis en correspondance une ou plusieurs fois.
- {n} L'élément précédent correspond exactement n fois.
- {n,} L'élément précédent est mis en correspondance n fois ou plus.
- {,m} L'élément précédent est mis en correspondance au plus m fois.
- {n,m} L'élément précédent est mis en correspondance au moins n fois, mais pas plus de m fois.
5. Vérification des mots complets, pas des sous-chaînes à l'aide de grep -w
Si vous souhaitez rechercher un mot et éviter qu'il ne corresponde aux sous-chaînes, utilisez l'option -w. Une simple recherche normale affichera toutes les lignes.
L'exemple suivant est le grep normal où il recherche "est". Lorsque vous recherchez "est", sans aucune option, il affichera "est", "son", "ceci" et tout ce qui a la sous-chaîne "est".
$ grep -i "is" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. Two lines above this line is empty. And this is the last line.
L'exemple suivant est le grep WORD où il recherche uniquement le mot "est". Veuillez noter que cette sortie ne contient pas la ligne "Cette ligne a tout son premier caractère du mot avec majuscule", même si "est" est là dans le "Ceci", car ce qui suit ne recherche que le mot "est " et non pour " ceci ".
$ grep -iw "is" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line.
6. Afficher les lignes avant/après/autour du match en utilisant grep -A, -B et -C
Lorsque vous faites un grep sur un gros fichier, il peut être utile de voir quelques lignes après le match. Vous pourriez vous sentir utile si grep peut vous montrer non seulement les lignes correspondantes, mais aussi les lignes après/avant/autour de la correspondance.
Veuillez créer le fichier demo_text suivant pour cet exemple.
$ cat demo_text 4. Vim Word Navigation You may want to do several navigation in relation to the words, such as: * e - go to the end of the current word. * E - go to the end of the current WORD. * b - go to the previous (before) word. * B - go to the previous (before) WORD. * w - go to the next word. * W - go to the next WORD. WORD - WORD consists of a sequence of non-blank characters, separated with white space. word - word consists of a sequence of letters, digits and underscores. Example to show the difference between WORD and word * 192.168.1.1 - single WORD * 192.168.1.1 - seven words.
6.1 Afficher N lignes après correspondance
-A est l'option qui imprime les N lignes spécifiées après la correspondance, comme indiqué ci-dessous.
Syntax: grep -A <N> "string" FILENAME
L'exemple suivant imprime la ligne correspondante, ainsi que les 3 lignes qui la suivent.
$ grep -A 3 -i "example" demo_text Example to show the difference between WORD and word * 192.168.1.1 - single WORD * 192.168.1.1 - seven words.
6.2 Afficher N lignes avant match
-B est l'option qui imprime les N lignes spécifiées avant la correspondance.
Syntax: grep -B <N> "string" FILENAME
Lorsque vous aviez l'option d'afficher les N lignes après correspondance, vous avez l'option -B pour le contraire.
$ grep -B 2 "single WORD" demo_text Example to show the difference between WORD and word * 192.168.1.1 - single WORD
6.3 Afficher N lignes autour de correspondance
-C est l'option qui imprime les N lignes spécifiées avant la correspondance. Dans certaines occasions, vous voudrez peut-être que le match apparaisse avec les lignes des deux côtés. Cette option affiche N lignes à la fois du côté (avant et après) du match.
$ grep -C 2 "Example" demo_text word - word consists of a sequence of letters, digits and underscores. Example to show the difference between WORD and word * 192.168.1.1 - single WORD
7. Mise en surbrillance de la recherche à l'aide de GREP_OPTIONS
Comme grep imprime les lignes du fichier selon le motif/chaîne que vous avez donné, si vous voulez qu'il mette en évidence la partie qui correspond à la ligne, vous devez suivre la méthode suivante.
Lorsque vous effectuez l'exportation suivante, vous obtenez la mise en surbrillance des recherches correspondantes. Dans l'exemple suivant, tout cela sera mis en évidence lorsque vous définirez la variable d'environnement GREP_OPTIONS comme indiqué ci-dessous.
$ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8' $ grep this demo_file this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line.
8. Recherche dans tous les fichiers de manière récursive à l'aide de grep -r
Lorsque vous souhaitez rechercher dans tous les fichiers du répertoire courant et de son sous-répertoire. L'option -r est celle que vous devez utiliser. L'exemple suivant recherchera la chaîne "ramesh" dans tous les fichiers du répertoire courant et de tous ses sous-répertoires.
$ grep -r "ramesh" *
9. Inverser la correspondance en utilisant grep -v
Vous aviez différentes options pour afficher les lignes correspondantes, pour afficher les lignes avant la correspondance, pour afficher les lignes après la correspondance et pour mettre en surbrillance la correspondance. Donc, certainement, vous voudriez aussi que l'option -v fasse une correspondance inversée.
Lorsque vous souhaitez afficher les lignes qui ne correspondent pas à la chaîne/motif donné, utilisez l'option -v comme indiqué ci-dessous. Cet exemple affichera toutes les lignes qui ne correspondent pas au mot "go".
$ grep -v "go" demo_text 4. Vim Word Navigation You may want to do several navigation in relation to the words, such as: WORD - WORD consists of a sequence of non-blank characters, separated with white space. word - word consists of a sequence of letters, digits and underscores. Example to show the difference between WORD and word * 192.168.1.1 - single WORD * 192.168.1.1 - seven words.
10. affiche les lignes qui ne correspondent pas à tout le motif donné.
Syntax: grep -v -e "pattern" -e "pattern"
$ cat test-file.txt a b c d $ grep -v -e "a" -e "b" -e "c" test-file.txt d
11. Compter le nombre de correspondances à l'aide de grep -c
Lorsque vous voulez compter le nombre de lignes correspondant au modèle/chaîne donné, utilisez l'option -c.
Syntax: grep -c "pattern" filename
$ grep -c "go" demo_text 6
Lorsque vous voulez, découvrez combien de lignes correspondent au motif
$ grep -c this demo_file 3
Quand vous voulez savoir combien de lignes ne correspondent pas au motif
$ grep -v -c this demo_file 4
12. Afficher uniquement les noms de fichiers qui correspondent au modèle donné en utilisant grep -l
Si vous souhaitez que grep n'affiche que les noms de fichiers correspondant au modèle donné, utilisez l'option -l (L minuscule).
Lorsque vous donnez plusieurs fichiers au grep en entrée, il affiche les noms de fichiers contenant le texte correspondant au modèle, ce qui sera très pratique lorsque vous essayez de trouver des notes dans toute votre structure de répertoires.
$ grep -l this demo_* demo_file demo_file1
13. Afficher uniquement la chaîne correspondante
Par défaut, grep affichera la ligne qui correspond au motif/chaîne donné, mais si vous voulez que grep n'affiche que la chaîne correspondante du motif, utilisez l'option -o.
Ce n'est peut-être pas très utile lorsque vous donnez la corde directement. Mais cela devient très utile lorsque vous donnez un motif regex et essayez de voir à quoi il correspond
$ grep -o "is.*line" demo_file is line is the 1st lower case line is line is is the last line
14. Afficher la position de la correspondance dans la ligne
Lorsque vous voulez que grep affiche la position où il correspond au modèle dans le fichier, utilisez les options suivantes comme
Syntax: grep -o -b "pattern" file
$ cat temp-file.txt 12345 12345 $ grep -o -b "3" temp-file.txt 2:3 8:3
Remarque : La sortie de la commande grep ci-dessus n'est pas la position dans la ligne, c'est le décalage d'octet de l'ensemble du fichier.
15. Afficher le numéro de ligne lors de l'affichage de la sortie à l'aide de grep -n
Pour afficher le numéro de ligne du fichier avec la ligne correspondante. Il effectue une numérotation de ligne basée sur 1 pour chaque fichier. Utilisez l'option -n pour utiliser cette fonctionnalité.
$ grep -n "go" demo_text 5: * e - go to the end of the current word. 6: * E - go to the end of the current WORD. 7: * b - go to the previous (before) word. 8: * B - go to the previous (before) WORD. 9: * w - go to the next word. 10: * W - go to the next WORD.
Tutoriels Grep supplémentaires
- 7 exemples d'opérateurs Linux Grep OR, Grep AND, Grep NOT
- Expressions régulières dans la commande Grep avec 10 exemples – Partie I
- Expressions régulières avancées dans la commande Grep avec 10 exemples – Partie II
- Recherche dans un fichier *.bz2 à l'aide de bzgrep et dans un fichier *.gz à l'aide de zgrep
Des articles Linux géniaux
Voici quelques exemples impressionnants de 15 articles qui pourraient vous être utiles.
- Linux Crontab :15 exemples de tâches Cron impressionnants
- Maman, je l'ai trouvé ! - 15 exemples pratiques de commande de recherche Linux
- 15 exemples pour maîtriser l'historique de la ligne de commande Linux
- Commande LS Unix :15 exemples pratiques