Comment retourner le nom du fichier et le numéro de ligne avec find… -exec grep?


45

Lors de l'utilisation find, comment renvoyer le nom du fichier et le numéro de ligne lors de la recherche d'une chaîne? Je parviens à renvoyer le nom du fichier dans une commande et les numéros de ligne avec une autre, mais je ne parviens 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' {} \;

Réponses:


51

Le commutateur de ligne de commande -Hoblige 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 le dit dans un commentaire , cela ne fait pas partie du standard POSIX; il est à la fois dans GNU et BSD grep, mais il est possible que certains systèmes ne l’aient pas (par exemple, Solaris).


4
Cette réponse pourrait être améliorée en signalant que le -Hdrapeau grepest une extension GNU non standard et en proposant une approche alternative pour les systèmes non GNU.
Kojiro


-1

Si votre grep supporte l' -rindicateur récursif , cela résout votre demande:

grep -rn "String to search " * 

1
C'est vrai, mais je ne vois pas ce que cela ajoute aux réponses existantes.
Wildcard

Et s'il n'y a qu'un seul fichier (non point) dans le répertoire en cours, cela n'affiche pas le nom du fichier.
G-Man dit 'Réintégrez Monica'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.