Come restituire sia il nome del file che il numero di riga con find ... -exec grep?


45

Quando si utilizza find, come si restituiscono il nome del file e il numero di riga quando si cerca una stringa? Riesco a restituire il nome del file in un comando e i numeri di riga con un altro, ma non riesco a combinarli.

Nomi dei file: find . -type f -exec grep -l 'string to search' {} \;

Numeri di riga: find . -type f -exec grep -n 'string to search' {} \;

Risposte:


51

L'opzione della riga di comando -Hforza la grepstampa del nome del file, anche con un solo file.

% 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.

Si noti che come dice Kojiro in un commento , questo non fa parte dello standard POSIX; è sia in GNU che in BSD grep, ma è possibile che alcuni sistemi non lo abbiano (ad esempio Solaris).


4
Questa risposta potrebbe essere migliorata sottolineando che la -Hbandiera grepè un'estensione GNU non standard e che propone un approccio alternativo per i sistemi non GNU.
Kojiro,


-1

Se il tuo grep supporta il -rflag ricorsivo , questo risolve la tua richiesta:

grep -rn "String to search " * 

1
È vero, ma non vedo cosa si aggiunge alle risposte esistenti.
Wildcard il

E se c'è solo un file (non punto) nella directory corrente, questo non mostra il nome del file.
G-Man dice "Reinstate Monica" il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.