Comment utiliser grep pour afficher les noms de fichiers et les numéros de ligne avant de faire correspondre les lignes

Comment utiliser grep pour afficher les noms de fichiers et les numéros de ligne avant de faire correspondre les lignes

grep est un utilitaire Linux couramment utilisé pour trouver le contenu d’un fichier ou toute entrée qui lui est transmise. Lors d’une recherche dans plusieurs fichiers, l’affichage du nom de fichier et des numéros de ligne est utile, en particulier lorsqu’il est utilisé pour l’automatisation dans des scripts shell.

Afficher les noms de fichiers avec grep

Par défaut, si vous transmettez plusieurs fichiers à grep, ils apparaîtront filename: avant la ligne correspondante pour plus de clarté. En fait, vous pouvez désactiver ce comportement avec un -h indicateur qui n’affichera jamais les noms de fichiers :

Cependant, si vous ne transmettez qu’un seul fichier à grep, il n’affichera pas les noms de fichiers par défaut. Cela peut être un problème lors de l’automatisation avec des scripts shell, car vous ne savez peut-être pas combien de fichiers se trouvent dans un répertoire, ce qui peut interrompre l’automatisation en s’appuyant sur la présence d’un nom de fichier.

Une solution simple consiste à utiliser  -H le drapeau majuscule, qui fait le contraire -h et inclut toujours les noms de fichiers quoi qu’il arrive, même si un seul fichier est passé en entrée.

grep -H "foo"file

Ce -H drapeau a un autre effet inattendu mais utile : lorsqu’il est combiné avec input stdin, comme les tubes Unix, il sera imprimé (standard input): à la place du nom de fichier.

Afficher les numéros de ligne avec grep

Vous pouvez également l’utiliser avec un -n indicateur pour obtenir le numéro de ligne :

grep -Hn "foo"

Hack conforme POSIX

L’indicateur -H n’est pas grepconforme à POSIX et n’est pas disponible sur certains systèmes d’exploitation obscurs basés sur Unix. Heureusement, il existe un hack que vous pouvez utiliser en passant /dev/null un deuxième fichier comme fausse entrée grepqui le fait croire qu’il y a plusieurs fichiers :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *