Come faccio a mostrare i nomi dei file solo dopo una parola chiave grep search?


15

Al momento ho n file di dati in una directory in cui ogni file ha al massimo 1 riga di dati molto lunghi. La mia struttura di directory è

director/
    data1.json
    data2.json
    data3.json

So che almeno uno di quei file contiene la parola chiave che sto cercando, ma poiché una riga di dati è troppo lunga, copre l'intero mio terminale. Come posso ottenere il nome file solo dopo aver eseguito una parola chiave grep? Il comando grep che sto usando è:

grep keyword *.json

Risposte:


30

L'argomento -l dovrebbe fare quello che vuoi.

   -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

7

Puoi usare xargs in combinazione con --null con grep o --print0 con ack. Trovo che la velocità ack sia più veloce.

grep -lr --null searchterm * | xargs -I {} -0 echo {}

ack -lr --print0 searchterm * | xargs -I {} -0 echo {}

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.