Как показать имена файлов только после поиска по ключевому слову 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.)

7

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.