Descrição
Imgine que você queira buscar todos os arquivos .txt que contenham as strings str1, str2, str3, ..., strn.
É só criar um arquivo com as strings a serem procuradas e usar o script.
É diferente do
# grep --file=arq *.txt
pois este retorna as arquivos desde que tenha uma das strings buscadas. No caso do script, o arquivo tem que ter todas as strings procuradas.
Vi um post com essa dúvida e resolvi postar o script.
[ Download:
nfgrep ]
[
Enviar nova versão ]
[ Esconder código-fonte ]
#*******************************************
# Por: Geraldo Jose Ferreira Chagas Junior
# 25/09/2008
#
#*******************************************
#!/bin/sh
# checando os parametros
if [ $# -le 1 ]; then
echo "Faltando parametro. $0 <a ser lido> <arquivos a ser buscado>"
exit
fi
l=""
# listando todos os arquivos que entrarao na busca
for i in $@; do
# o arquivo contendo a lista de string nao entrara na busca
if [ $i != $1 ]; then
l="$l $i"
fi
done
# abrindo o arquivo com as string e pegando cada uma para ser feita a busca
# note que cada string tem que estar em uma linha
for o in $(cat $1); do
# buscando as string nos arquivos
for t in $(grep -l $o $l); do
# apenas os arquivos que tem a string procurada fara parte da proxima busca
s="$s $t"
done
# se $s estiver vazio e pq a busca nao encontrou ocorrencia
# assim a busca sera encerrada, ja que todas as strings tem que ser
# encontrada
if [ -z "$s" ]; then
exit
fi
l=$s
s=""
done
echo $l
Scripts recomendados
Gravando 4 CDs ao mesmo tempo
Diferença entre colunas
Script para Backup Banco Firebird
Script Simples para informações do Sistema
Configurando e conectando Speedy
Comentários
[1] Comentário enviado por
esojep em 27/09/2008 - 08:49h:
simplificando:
$ find . -type f -name *.txt | xargs grep -E '(string1|string2|string3)'
o find procura e o xargs construi com a saida gerada pelo find uma lista de arquivos para o grep
[2] Comentário enviado por
gjr_rj em 27/09/2008 - 16:59h:
Sim, agora, temdo quase 1000 strings ...