Dans notre premier article sur la commande grep, nous avons couvert un certain nombre de fonctionnalités offertes par l'outil, y compris comment vous pouvez l'utiliser pour rechercher uniquement des mots, rechercher deux mots, compter les lignes contenant le mot correspondant, etc. En plus de cela, l'outil fournit des fonctionnalités plus faciles à comprendre et utiles. Dans cet article, nous en aborderons quelques-uns.
Veuillez noter que tous les exemples mentionnés dans ce tutoriel ont été testés sur Ubuntu 14.04LTS. De plus, nous utiliserons le fichier suivant (test_file1.txt) pour tous nos exemples liés à grep dans ce didacticiel :
Recherche insensible à la casse avec Grep
Par défaut, grep est sensible à la casse, ce qui signifie, par exemple, qu'il traitera 'ABC' et 'abc' séparément. Cependant, si vous voulez que votre recherche soit insensible à la casse, vous pouvez utiliser le -i option de ligne de commande.
grep -i [string-to-be-searched] [filename]
Par exemple :
grep -i "linux" test_file1.txt
Remarque :Non seulement le modèle (par exemple, "linux" dans l'exemple ci-dessus), la page de manuel grep indique que l'option -i garantit également que la sensibilité à la casse pour les fichiers d'entrée est également ignorée. Voici l'extrait :
-i, --ignore-case
Ignore case distinctions in both the PATTERN and the input files. (-i is specified by POSIX.)
Cependant, nous n'avons pas pu reproduire le comportement lié aux fichiers d'entrée de notre côté.
Afficher certaines lignes sans correspondance avec la ligne contenant la chaîne correspondante dans Grep
À l'aide de cet outil, vous pouvez également afficher un nombre spécifié de lignes après, avant ou autour de la ligne contenant la chaîne correspondante.
Utilisez le -A option de ligne de commande pour imprimer 'N' lignes après la ligne correspondante.
$ grep -A N [string-to-be-searched] [filename]
Par exemple :
$ grep -A 2 "linux" test_file1.txt
Voici le résultat de la commande ci-dessus
De même, l'option de ligne de commande -B est utilisée pour afficher les lignes avant la ligne correspondante.
$ grep -B N [string-to-be-searched] [filename]
Par exemple :
$ grep -B 2 "linux" test_file1.txt
Voici le résultat :
Enfin, pour imprimer des lignes autour de la ligne correspondante, utilisez l'option de ligne de commande -C.
$ grep -C N [string-to-be-searched] [filename]
Par exemple :
$ grep -C 2 "linux" test_file1.txt
Voici la sortie capturée :
Afficher uniquement les chaînes correspondantes dans Grep
Vous êtes également autorisé à imprimer uniquement la chaîne correspondante sur la sortie standard (au lieu des lignes complètes qui s'affichent par défaut). Cette fonctionnalité est accessible à l'aide de l'option de ligne de commande -o.
$ grep -o [string-to-be-searched] [filename]
Par exemple, si l'exigence est de rechercher une chaîne "linux" dans un fichier (mais que les lignes complètes ne doivent pas être imprimées), nous utiliserons la commande suivante.
$ grep -o "linux" [file-name]
Nous pouvons également utiliser des caractères génériques tels que * et .* pour grep plus d'une chaîne. Par exemple, si nous voulons grep un groupe de mots commençant par "comment" et se terminant par "linux", nous pouvons utiliser la commande suivante.
$ grep -o “how.*linux” [file-name]
Position d'affichage dans Grep
La commande grep vous permet également d'afficher le décalage d'octet de la ligne dans laquelle la chaîne correspondante apparaît. Cette fonction est accessible à l'aide de l'option de ligne de commande -b. Mais pour une meilleure utilisation de cette option, vous pouvez l'utiliser avec l'option de ligne de commande -o, qui affichera la position exacte de la chaîne correspondante.
$ grep -o -b [string-to-be-searched] [filename]
Par exemple :
$ grep -o -b "for" test_file1.txt
Voici le résultat :
Conclusion
Vous n'avez peut-être pas besoin de toutes ces options tous les jours, mais vous devriez au moins les connaître, car vous ne savez jamais quand elles pourraient vous être utiles. Grep devient encore plus puissant lorsqu'il est utilisé avec une expression régulière, mais nous laisserons ce sujet pour un autre jour.