[SP-pm] Grep ou Map?

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Thu Jul 1 21:19:48 PDT 2010


Vou te ajudar rapidinho antes de fazer minha janta,

Certo, você não precisa usar comandos externos para ter as strings num
array, usando estrutura de dados básica podemos montar algo bem usável
e simples.
Só para ressaltar, você precisa abrir o arquivo "/etc/ntp.conf", pegar
todas as linhas que tem "server" e checar alguns endereços de Internet
Protocol.

Você necessariamente não precisa usar map e grep,

<code>

#!/usr/bin/perl

use strict;
use warnings;

open my $list, '<', '/etc/ntp.conf' or die $!;
{
  my @iplist = qw/192.168.1.1 192.168.1.2/;
  for my $ip (@iplist) {
      print "$ip nao encontrado\n" unless check_ip($ip);
  }
}
close $list or die $!;

sub check_ip {
    my $check = shift;
    while ( my $lin = <$list> ) {
        next if $lin !~ /^server/;
        if ( $lin =~ /$check/ ) {
            return 1;
        }
    }
    return undef;
}

</code>

O código acima é um código bem amador e simples de entender, como o
one-liner abaixo,
perl -nE 'print "nao encontrado\n" unless /server 127.0.0.1/'  /etc/ntp.conf

2010/7/2 Marcelo Gigliotti <marcelo.gigliotti em gmail.com>:
> Srs do conselho :-),
>
> estou desenvolvendo um script pra fazer algumas validações nos meus
> servidores... casos particulares da app mesmo... e estou com a seguinte
> situação...
>
> em determinado momento... eu tenho o seguinte bloco
>
> my $conf_local = "server 192.168.10.3";
> my @conf_srv = qx(cat /etc/ntp.conf | grep -i ^server);
> este comando me retorna algumas linhas... como
>
> *****
> server 192.168.1.2
>
> ***********
>
> if ( grep (! /$conf_local/, em conf_srv) {
>        print "Nao encontrado";
> }
>
> O problema é que neste caso... a função grep sempre está retornando true,
> mesmo não havendo a linha pesquisada... fiz alguns testes e descobri que ele
> não está procurando a string server apenas e não a linha inteira como desejo
> server 192.168.10.3
>
> alguém poderia me dar uma dica? de como pesquisar a linha inteira mesmo com
> espaços... li alguma coisa com a função map... mas ainda não tive tempo de
> testar... alguém teria outra idéia melhor?

Talvez, você não saiba o que são Expressões Regulares,

http://perl.org.br/Perldoc/V500807/Perlrequick

(não testei nenhum código que eu escrevi ^)

[]'s


-- 
http://www.danielmantovani.com
"If you’ve never written anything thoughtful, then you’ve never had
any difficult, important, or interesting thoughts. That’s the secret:
people who don’t write, are people who don’t think."


More information about the SaoPaulo-pm mailing list