ti-enxame.com

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

Dado este exemplo de estrutura de pastas:

/folder1/file1.txt[.____.

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

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

46
Anders Sandvig

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).

62
Kyle Brandt

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

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

você poderá fazer uso dos seus zsh 's EXTENDED_GLOB opção ( docs )

grep <pattern> **/*.txt
2
santa

Você pode dar uma olhada no ack em http://betterthangrep.com , que possui recursos para selecionar arquivos a serem pesquisados ​​por tipo de arquivo.

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

A resposta de Mannis criaria um novo processo grep para cada arquivo de texto. Se você tiver lotes de arquivos de texto, poderá considerar grepping todos os arquivos primeiro e escolher os arquivos .txt quando terminar:

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

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

0
Commander Keen

É 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
0
santa