Pular para o conteúdo

buscar textos que contenham várias strings

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.
Geraldo José Ferreira Chagas Júnior gjr_rj
Hits: 8.165 Categoria: Shell Script Subcategoria: Introdução
  • Download
  • Nova versão
  • Indicar
  • Denunciar

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

Verifica duplicação de IPs na rede

Script para verificação do serviço do Apache (webserver) em sistemas Linux Ubun

MPlayer em modo texto com desligamento programado do sistema

Script que mostra informações sobre o sistema

Sabendo quem acessou um site

#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

Entre na sua conta para comentar.