Wie zeige ich Dateinamen erst nach einer Stichwortsuche an?

15

Ich habe derzeit n Datendateien in einem Verzeichnis, in dem jede Datei höchstens 1 Zeile sehr langer Daten enthält. Meine Verzeichnisstruktur ist

director/
    data1.json
    data2.json
    data3.json

Ich weiß, dass mindestens eine dieser Dateien das gesuchte Schlüsselwort enthält, aber da die eine Datenzeile zu lang ist, deckt sie mein gesamtes Terminal ab. Wie erhalte ich den Dateinamen erst, nachdem ich ein Schlüsselwort grep ausgeführt habe? Der grep Befehl, den ich benutze, ist:

grep keyword *.json
Thierry Lam
quelle

Antworten:

30

Das Argument -l sollte tun, was Sie wollen.

   -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.)
theotherreceive
quelle
7

Sie können xargs in Kombination mit --null mit grep oder --print0 mit ack verwenden. Ich finde, dass ack Geschwindigkeit schneller ist.

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

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

innere Kraft
quelle