shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] script com o log do dhpcd


From: Aurelio Marinho Jargas
Subject: Re: [shell-script] script com o log do dhpcd
Date: Thu, 25 Nov 2004 13:32:44 -0300 (ART)

oi bruno,

 --- Bruno Tobias Stella <address@hidden> escreveu: 
> > > lease 172.16.10.10 {
> > >   starts 2 2004/11/23 12:04:44;
> > >   ends 2 2004/11/30 12:04:44;
> > >   binding state active;
> > >   next binding state free;
> > >   hardware ethernet 00:d0:09:fd:96:ea;
> > >   uid "\001\000\320\011\375\226\352";
> > >   client-hostname "Micro_do_Jose";
> > > }
> > >   passo ao script o IP 172.16.10.10 como parâmetro e recebo
> > > "Micro_do_Jose".
...
> > uma maneira mais esperta é filtrar somente as linhas
> > com IP e nome, no log, usando um egrep:
> >     egrep 'lease|client-hostname' dhcpd.log
> > e depois fica mais fácil extrair a linha de baixo do IP,
> > com outro grep por exemplo.
> 
> Desculpe a minha ignorância, mas como eu pegaria com um grep a linha
> debaixo do IP ?

usa a opção -A (the After, do inglês Depois), assim:

  $ seq 5 | grep -A1 3
  3
  4
  $ seq 5 | grep -A1 3 | tail -1
  4

com o -A1 você pega a linha do IP e a seguinte, e com
o tail -1 (ou sed 1d) você apaga a linha do IP.

   
> > ou ainda, um único SED que é pequeno mas exige mais
> > conhecimentos para entendê-lo:
> >      IP="$1"
> >      cat dhcpd.log |
> >      sed -n "/^lease $IP {/,/}/{ s/client-hostname //p; }"
...
> Aurélio, se não for pedir muito, você poderia explicar só um
> pouquinho este comando do sed?

é um endereço que indica um trecho de linhas e um comando s///

primeiro é definido o trecho da entrada completa do log
que começa numa linha como "lease 10.0.0.1 {" e vai até
a linha que fecha as chaves "}":

      /^lease $IP {/ , /}/

para este trecho de linhas, é aplicado o comando que mostra
apenas a linha do "cliente-hostname", apagando essa string
e sobrndo apenas o nome da máquina:

      s/client-hostname //p

ele só mostra essa linha e nao todas as outras do registro
porque o sed foi chamado com a opção -n, que não mostra
nada na saída, a não ser que o comando Print seja usado,
e é por isso que tem aquele "p" no final do s///.

no email original eu coloquei o s/// entre {chaves}, mas
como é só um comando não precisa:

      sed -n "/^lease $IP {/ , /}/ s/client-hostname //p"

beleza?

=====
-- 
Aurelio Marinho Jargas, Curitiba, Conectiva
Funcoes ZZ v4.1111 http://aurelio.net/zz
txt2tags v2.1 http://txt2tags.sf.net/pt


        
        
                
_______________________________________________________ 
Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! 
http://br.acesso.yahoo.com/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]