Quando si utilizza find
, come restituisco il nome del file e il numero di riga durante la ricerca di una stringa? Riesco a restituire il nome del file in un comando ei 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" {} \;
Risposta
Il linterruttore della riga di comando -H
forza grep
a stampare il 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.
Tieni presente che come dice Kojiro in un commento , questo non fa parte dello standard POSIX, è sia in GNU che in grep BSD, ma è possibile che alcuni sistemi non lo abbiano (es. Solaris).
Commenti
Risposta
find . -type f -exec grep -n "string to search" /dev/null {} +
(o con GNU grep, vedi -H
opzione)
Commenti
- sia + che -H funzionano alla grande, grazie!
- E correlato a questa risposta: unix.stackexchange.com/questions/3682/…
- +1 a destra, perché se
grep
avesse più argomenti di nomi di file forzerebbe loutput dei nomi di file corrispondenti. Intelligente!
Rispondi
Se il tuo grep supporta il -r
flag, questo risolve la tua richiesta:
grep -rn "String to search " *
Commenti
- That ' è vero, ma non ' per vedere cosa questo aggiunge alle risposte esistenti.
- E se ce nè solo una (senza punto ) nella directory corrente, questo non mostra il nome del file.
-H
sugrep
è un estensione GNU non standard e propone un approccio alternativo per i sistemi non GNU.