Как показать имена файлов только после поиска по ключевому слову grep?

15

В настоящее время у меня есть n файлов данных в каталоге, где каждый файл содержит не более 1 строки очень длинных данных. Моя структура каталогов

director/
    data1.json
    data2.json
    data3.json

Я знаю, что хотя бы один из этих файлов содержит ключевое слово, которое я ищу, но поскольку одна строка данных слишком длинная, она охватывает весь мой терминал. Как получить имя файла только после выполнения ключевого слова grep? Я использую команду grep:

grep keyword *.json
Тьерри Лам
источник

Ответы:

30

Аргумент -l должен делать то, что вы хотите.

   -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
источник
7

Вы можете использовать xargs в сочетании с --null с grep или --print0 с ack. Я считаю, что скорость Ack быстрее.

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

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

insidepower
источник