Grep em loop infinito

Publicado por Evaldo Avelar Marques (última atualização em 10/09/2009)

[ Hits: 9.893 ]

Homepage: http://evaldoavelar.blogspot.com/

Download filtro

Download 1251820401.filtro (versão 2)




Realiza um grep infinito em um arquivo, útil para se acompanhar um log de alguma ferramenta.

Exemplo de uso:

$ chmod 777 filtro
$ ./filtro  "LOGIN" /var/log/messages 6

LOGIN = padrão para buscar no arquivo
/var/log/messages = arquivo para fazer a pesquisa
6 = tempo para atualização

  



Versões atualizadas deste script

Versão 2 - Enviado por Evaldo Avelar Marques em 01/09/2009

Changelog: Grep em loop infinito.

Versão 1.2 (melhorado)

Download 1251820401.filtro


Esconder código-fonte

#######################################
##  Grep infinito
##
## Descricao:
## realiza um grep infinito em um arquivo, util para se acompanhar
## um log de alguma ferramenta
## Trabalha em loop infinito, para sair tecle control-c
##
## Entradas: palavra - arquivo - tempo de atualizacao
## Saidas: linhas com o padrap  na saida padrao
##
## autor: Evaldo Avelar Marques agosto - 2009
## versao: 1.0
##
########################################
#!/bin/bash

        #verifica o padrao
        if [ -z $1 ]; then
                echo "Padrao não foi informado! ";
                 exit 2;
        else
                padrao=$1;
        fi

        #verifica o arquivo
        if [ -z $2 ];then
                echo "Arquivo  nao foi informado! ";
                exit 2;
        #checa se o arquivo existe
        elif [ ! -f $2 ] ;then
                echo "Arquivo nao existe! "
                exit 2;
        #checa se arquivo esta vazio
        elif [ ! -s $2 ] ;then
                echo "Arquivo esta vazio! "
                exit 2;
        else
                log=$2;
        fi

        #verifica o contador de tempo
        if [ -z $3 ];then
                tmp=5;
        else
                tmp=$3;
        fi

        while : ;
        do
                grep  $padrao $log ;
                sleep $tmp;
        done;


############### Fim ##########################3

Scripts recomendados

Desligamento da máquina caso o servidor venha a sair do ar.

Monitoramento da bateria

Coleta de WWN em AIX

Incluindo lista de IP's nos arquivos de bloqueio do Squid automaticamente

Converter animes em .mp4 para .avi (e outros) com qualidade perfeita


  

Comentários
[1] Comentário enviado por neyfrota em 31/08/2009 - 04:59h

cara.. eu nao testei nao... mas... se entrar uma linha com LOGIN no arquivo.. pelo que percebi... vai ficar sendo cuspida na tela de 6 em 6 segundos... fora que ta "grepando" o arquivo inteiro de 6 em 6 segundos... em arquivos grandes isso vai ser um terror. Melhor dar um tail e "pipar" pra um grep... assim fica em tempo real....

tail -f <ARQUIVO> | grep <PADRAO>

mas posso ta errado : )

[2] Comentário enviado por cenoura em 31/08/2009 - 08:26h

Este script não gera muito I/O para arquivos muito grandes ao ficar rodando um grep nele todo a cada 6 segundos?
Acredito que a sugestão do comentário [1] (o "tail -f arquivo|grep padrao") é uma solução melhor e que é atualizada num tempo menor que os 6 segundos.

[3] Comentário enviado por evaldoavelar em 31/08/2009 - 08:59h

Isso mesmo!

Vocês estão certos, é porque no meu caso precisa ver realmente uma grande parte do arquivo.
Vou modificar para a sugestão de vocês!

Obrigado.

[4] Comentário enviado por neyfrota em 31/08/2009 - 17:20h

faz assm:

- bota o seu programa, pra receber <ARQUIVO> e <PADRAO>
- faz ele verificar arquivo e padrao
- manda ele dar um greep no <arquivo> como <padrao> (mostrar o passado)
- inicia tail-f com pipe pro grep <padrao> (passa mostrar presente e futuro)

por seguranca... o primeiro grep (do passado) tasca em vez de grep puro (que vai ver o arquivo todo... o que vai ser terrivel nos logs grandoes de 25mb) ... anda com tail tb.. mais lendo seila.. (um chute) ... as ultimas 10.000 linas....
tail -n 10000 <ARQUIVO> | grep <PADRAO>

assim quando chamar o programa.. ele olha no passado (ate 10.000 linhas no passado) e passa a verificar em tempo real (tail -f) ... assim fica realmente pratico...

[5] Comentário enviado por neyfrota em 31/08/2009 - 17:35h

mas isso tudo tb se resume a um comando so: hehehe
tail -n 10000 -f <ARQUIVO> | grep <PADRAO>

mesmo usando multiplos arquivos
tail -n 10000 -f <ARQUIVO1> <ARQUIVO2> | grep <PADRAO>

[6] Comentário enviado por evaldoavelar em 31/08/2009 - 18:11h

Sugestão acatada!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts