Grep em loop infinito

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

[ Hits: 9.699 ]

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

Shell Script - para configurações de Vlans Cisco.

Controlando o compartilhamento de internet por MAC

Troca automatica de papel de parade no fluxbox

Limpar logs do sistema

Verificar se o java está no PATH


  

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