Como mostro os nomes de arquivos somente após uma pesquisa grep de palavras-chave?

15

Atualmente, tenho n arquivos de dados em um diretório em que cada arquivo tem no máximo 1 linha de dados muito longos. Minha estrutura de diretórios é

director/
    data1.json
    data2.json
    data3.json

Sei que pelo menos um desses arquivos contém a palavra-chave que estou procurando, mas como a única linha de dados é muito longa, ela cobre todo o meu terminal. Como obtenho o nome do arquivo somente após executar uma palavra-chave grep? O comando grep que estou usando é:

grep keyword *.json
Thierry Lam
fonte

Respostas:

30

O argumento -l deve fazer o que você deseja.

   -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
fonte
7

Você pode usar xargs em combinação com --null com grep ou --print0 com ack. Acho que a velocidade de reconhecimento é mais rápida.

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

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

força interior
fonte