encontra uma string em todos os arquivos em um diretório

1

Eu quero encontrar {{text}} em todos os arquivos e vermelho no novo arquivo. Eu tentei isso, mas não funciona para mim

find . -type f -not -name "*.dll" -not -name "*.zip" -exec cat {} \; |
    grep "\{.*" | cut -d "{" -f1 | sort | uniq > keys.txt
    
por Matthis.h 27.06.2018 / 14:49

2 respostas

0

Acho que você está procurando por isso:

grep -FIrho '{{text}}' . >/tmp/keys.txt
mv -f /tmp/keys.txt .

Ou talvez isso, se você realmente precisar excluir apenas .dll e .zip arquivos:

find . \( -name '*.zip -o -name '*.dll' \) -prune -o -type f -exec grep -Fho '{{text}}' {} + >/tmp/keys.txt
mv -f /tmp/keys.txt .

Observe que keys.txt terminará contendo zero ou mais linhas de {{text}} . Você talvez pretenda pedir para registrar os nomes dos arquivos em vez do conteúdo correspondente? Ou talvez a linha inteira em que {{text}} está presente?

    
por 27.06.2018 / 16:30
0

Alternativamente, para chamar grep recursivamente através de shell e find magic, alguns programas podem fazer o trabalho tedioso para você.

Por exemplo, com o silversearcher-ag ( link ) ou ack ( link ), é tão simples como:

ack '{{text}}'

ou

ag '{{text}}'

Essas ferramentas também têm a vantagem de evitar a pesquisa em arquivos binários ou em diretórios como .git , .svn etc. por padrão e são muito mais rápidas do que chamar grep em um loop.

Estas ferramentas estão presentes nos repositórios das principais distribuições GNU / Linux.

    
por 27.06.2018 / 16:30

Tags