Назад | Перейти на главную страницу

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

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

director/
    data1.json
    data2.json
    data3.json

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

grep keyword *.json

Аргумент -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.)

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

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

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