web-dev-qa-db-fra.com

Comment renvoyer le nom de fichier et le numéro de ligne avec find ... -exec grep?

Lorsque j'utilise find, comment puis-je retourner le nom de fichier et le numéro de ligne lors de la recherche d'une chaîne? J'arrive à renvoyer le nom de fichier dans une commande et les numéros de ligne avec une autre, mais je n'arrive pas à les combiner.

Noms de fichiers: find . -type f -exec grep -l 'string to search' {} \;

Numéros de ligne: find . -type f -exec grep -n 'string to search' {} \;

47
Danny_Joris

Le commutateur de ligne de commande -H force grep à imprimer le nom du fichier, même avec un seul fichier.

% grep -n 7 test.in
7:7
% grep -Hn 7 test.in
test.in:7:7

   -H, --with-filename
          Print the filename for each match.

Notez que comme Kojiro dit dans n commentaire , cela ne fait pas partie de la norme POSIX; il est dans les deux GNU et BSD grep, mais il est possible que certains systèmes ne l'aient pas (par exemple Solaris).

56
Kevin
find . -type f -exec grep -n 'string to search' /dev/null {} +

(ou avec GNU grep, voir le -H option)

22
Stéphane Chazelas