Grep em arquivos com uma extensão específica em um diretório

11

Existe um comando que permite pesquisar uma palavra-chave em arquivos em um diretório com extensão específica?

A string grep -irn "string" ./path fornece uma pesquisa recursiva para todos os arquivos no diretório ./path . Meu requisito específico é pesquisar em todos os arquivos em ./path com uma extensão como *.h

    
por Ginu Jacob 08.09.2016 / 05:49

6 respostas

10

S et (ativar) o sh ell opt íon globstar com o comando

    shopt -s globstar

Isso fará com que ** como componente do nome do arquivo signifique tudo aqui e abaixo. Então path/** significa tudo no diretório path e seus subdiretórios . (Você não precisa digitar ./ aqui.) Então você pode usar

grep -in "string" path/**/*.h

para pesquisar todos os arquivos .h em e abaixo de path .

Você pode u definir opções com shopt -u .

    
por 08.09.2016 / 05:54
10

Depois de algumas tentativas, acho que grep -irn 'string' --include '*.h' é mais útil

    
por 08.09.2016 / 06:04
5
find /path -iname "*.h" -exec grep -inH "string" "{}" \;
    
por 08.09.2016 / 05:53
3

Se você puder instalar algo em sua máquina, sugiro usar ack .

Você pode fazer exatamente o que precisa com ele e muito mais. Para o seu caso de uso, você pode fazer:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • Filtros - hh em arquivos h
  • -i ignora o caso

Para descobrir quais filtros de arquivo são suportados nativamente, execute o comando ack --help=type .

    
por 08.09.2016 / 13:56
3

E esse aqui?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

Explicação:

  • -L: siga os links simbólicos
  • -name: usando o asterisco, você pode descrever as extensões
  • -em: igual à sua proposta, mas o 'r' é substituído pelo comando find
  • {}: representa o resultado do comando find
  • \; : caso você combine find com -exec , esse é o especificador de fim de comando
por 08.09.2016 / 14:28
0

Se você está usando o gnu grep, então ele tem um sinalizador que faz exatamente o que você quer:

grep -irn --include=\*.h "string" path

embora eu não ache que esteja disponível em outros greps.

    
por 08.09.2016 / 19:39