В настоящее время у меня есть 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 {}