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

  • Questa risposta potrebbe essere migliorata facendo notare che il flag -H su grep è un estensione GNU non standard e propone un approccio alternativo per i sistemi non GNU.

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *