Grep recursivo com padrão de nome de arquivo especificado

0

É possível pesquisar recursivamente e com um determinado padrão de arquivo?

Estou tentando fazer o equivalente a

find ./ -name "*.[c|h]" -exec grep -Hn PATTERN {} \;

Obviamente, você pode usar o flag -r do grep, mas quando eu especificar um padrão de nome de arquivo como:

grep -Hn -r PATTERN *.c

Ele procura apenas arquivos * .c no diretório atual, não de forma recursiva.

Eu encontrei isso, mas ele não fala sobre como especificar nomes de arquivos: greping recursivo vs find / -tipo f -exec grep {} \; Qual é mais eficiente / mais rápido?

    
por Farhan Yusufzai 12.01.2017 / 18:11

2 respostas

2

Pelo menos com versões recentes do GNU grep , você pode usar padrões glob em um argumento --include

grep -Hrn --include="*.[ch]" PATTERN .

[No grep grep > 2.11 você pode omitir o diretório inicial explícito . ao usar -r ]

    
por 12.01.2017 / 18:25
0

O *.c é expandido pelo shell antes que grep seja executado. Com um shell de fantasia adequada (por exemplo, ZSH, possivelmente com extendedglob set), pode-se pré-expandir recursivamente via algo como

grep bla **/*.[ch]

Mas isso é uma solução shell. Outras soluções seriam examinar o suporte à detecção de arquivos em ferramentas como o pesquisador de prata , codesearch , ripgrep .

    
por 12.01.2017 / 18:33

Tags