Como faço para mostrar nomes de arquivos somente depois de uma pesquisa grep por palavra-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

Eu 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 faço para obter o nome do arquivo somente depois de executar uma palavra-chave grep? O comando grep que estou usando é:

grep keyword *.json
    
por Thierry Lam 21.08.2009 / 22:50

2 respostas

28

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

   -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.)
    
por 21.08.2009 / 22:55
7

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

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

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

    
por 07.03.2015 / 05:34

Tags