buscar textos que contenham várias strings

Publicado por Geraldo José Ferreira Chagas Júnior 26/09/2008

[ Hits: 7.703 ]

Homepage: http://prginfo.blogspot.com

Download nfgrep




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.

  



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

configurando o idesk

Fibonacci em bash shell

Gerando cadeias aleatórias

Mostrando informações sobre o sistema

Adicionando usuários para email


  

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


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts