Pesquisa de texto recursiva com padrões grep e de arquivo


46

Dado este exemplo de estrutura de pastas:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

Como faço uma pesquisa de texto recursiva em todos os *.txtarquivos com grep"/"?

( "grep -r <pattern> *.txt"falha ao executar a partir de "/", pois não há .txtarquivos nessa pasta.)

Respostas:


61

Minha versão do GNU Grep tem uma opção para isso:

grep -R --include='*.txt' $Pattern

Descrito da seguinte forma:

--include=GLOB

Pesquise apenas arquivos cujo nome base corresponda ao GLOB (usando a correspondência curinga, conforme descrito em --exclude).


19

Se você tiver um grande número de arquivos, seria útil incorporar xargs no comando para evitar um erro 'Lista de argumentos muito longa'.

find . -name '*.txt' -print | xargs grep <pattern>

6
Se houver espaços em qualquer um dos nomes de arquivo ou diretório, use este formulário: find. -name '* .txt' -print0 | xargs -0 grep <padrão>
Jason Luther

2
E, claro, há a questão dos nomes de arquivos que começam com -.
TJ Crowder

grepé mais rápido find.
Nabi KAZ

2

você pode ser capaz de fazer uso de seu zsh's EXTENDED_GLOBopção ( docs )

grep <pattern> **/*.txt

Somente se OP estiver usando zsh, mas interessante, no entanto.
Law29


0
find . -name '*.txt' -type f -exec grep <pattern> {} \;

você pode querer usar "find. -name '* .txt' -type f -exec grep <padrão> {} +" para que ele se comporte de maneira semelhante à versão de Mark Robinson - funciona apenas com o GNU
serverhorror

0

A resposta do Mannis criaria um novo processo grep para cada arquivo de texto. Se você tiver muitos arquivos de texto por lá, considere grepping todos os arquivos primeiro e escolha os arquivos .txt quando terminar:

grep -r <pattern> * | grep \.txt:

Isso exige mais disco, mas pode ser mais rápido de qualquer maneira.


0

É 2019 e não há como eu ainda usar grep para pesquisa de texto recursiva.

As respostas do IMHO de hoje devem incluir ripgrep :

rg <pattern> -ttxt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.