Bagaimana cara menampilkan nama file hanya setelah pencarian kata kunci grep?

15

Saat ini saya memiliki n file data dalam direktori di mana setiap file memiliki paling banyak 1 baris data yang sangat panjang. Struktur direktori saya adalah

director/
    data1.json
    data2.json
    data3.json

Saya tahu bahwa setidaknya satu dari file-file itu mengandung kata kunci yang saya cari, tetapi karena satu baris data terlalu panjang, itu mencakup seluruh terminal saya. Bagaimana cara mendapatkan nama file hanya setelah melakukan kata kunci grep? Perintah grep yang saya gunakan adalah:

grep keyword *.json
Thierry Lam
sumber

Jawaban:

30

Argumen -l harus melakukan apa yang Anda inginkan.

   -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.)
theecereceive
sumber
7

Anda dapat menggunakan xargs dalam kombinasi dengan --null with grep atau --print0 dengan ack. Saya menemukan bahwa kecepatan ack lebih cepat.

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

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

di bawah kekuasaan
sumber