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

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

Re: [shell-script] selecionar substring


From: Sergio Nery Simoes
Subject: Re: [shell-script] selecionar substring
Date: Mon, 2 Oct 2006 20:52:15 -0300

Olá Alfredo,
aproveitando o seu comentário, gostaria de alertar que nem sempre solução
bonita é sinônimo de desempenho.
Algumas vezes, executar comandos muito poderosos e processar expressões
regulares complexas ao invés de uma solução mais simples ("as lusitanas")
pode acabar onerando mais o processador.
Claro que isso depende da implementação do comando em cada sistema (como é o
caso do fgrep no linux, que teoricamente deveria ser mais rápido mas na
verdade é um script que chama o grep e por isso acaba sendo mais lento que o
próprio grep).

Por outro lado, devo concordar que as soluções simples nem sempre são
elegantes, parecendo até mesmo lusitanas, quando não conhecemos o
funcionamento delas no quesito desempenho. Alem disso, há construções
complexas que necessitam de expressões complexas, neste caso não tem jeito
tornarmos a solução simples.
O ideal é buscar desempenho sempre que possível.

Gostaria que executasse os comandos abaixo no seu sistema e verificasse qual
eh mais rápida...


Por favor, faça o teste:
====
# forma elegante

time for i in `seq 1 2000`
do
        echo "PING teste.com (69.36.226.134): 56 data bytes" |
sed -r 's/^.*\((([0-9]{1,3}\.){3}[0-9]{1,3}).*$/\1/'
done > /dev/null

#----
#forma lusitana

time for i in `seq 1 2000`
do
        echo "PING teste.com (69.36.226.134): 56 data bytes" |
cut -d"(" -f2 | cut -d")" -f1
done > /dev/null

====

Sergio.


+++++++++++++++++=

2006/10/2, Alfredo Casanova <address@hidden>:
>
> heheheh
> jeito lusitano
>
> echo "PING teste.com (69.36.226.134): 56 data bytes" | cut -f2 -d\( | cut
> -f1 -d\)
>
>
> On 10/2/06, Humberto Pereira <address@hidden>
> wrote:
> >
> > On Mon, 02 Oct 2006 18:37:12 -0300, Celso Viana <address@hidden>
> > wrote:
> > > 2006/10/2, Humberto Pereira <address@hidden>:
> > > Humberto,
> > >
> > > Poderia traduzir o ...
> > > sed -r 's/^.*\((([0-9]{1,3}\.){3}[0-9]{1,3}).*$/\1/'
> > A expressao pega tudo entre () q tenha 1 a 3 numeros seguido de ponto 4
> > vezes. O q nao for igual a isso, ele ranca fora da string.
> >
> > >
> > > o que faz a opção "-r" (sh/csh no FreeBSD não tenho essa oção)
> >
> > o -r eh p/ expressoes regulares extendidas. Com ele vc nao precisa
> colocar
> > escape (\) nos caracteres especiais, (){}.,etc.
> > acredito q isso tenha apenas no sed GNU.
> >
> > Como vc nao tem o -r, remove ele do comando e coloca \ onde tiver () e
> {}
> > e onde tiver remove.
> >
> > [begnini@coke tmp]$ echo "PING teste.com (69.36.226.134): 56 data bytes"
> |
> > sed 's/^.*(\(\([0-9]\{1,3\}.\)\{3\}[0-9]\{1,3\}\).*$/\1/'
> > 69.36.226.134
> > [begnini@coke tmp]$
> >
> >
> > []s
> > Humberto Pereira
> > --
> > Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
> >
> >
> > ---------------------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de programação,
> como
> > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio
> > aviso.
> > ---------------------------------------------------------------------
> > Sair da lista: address@hidden
> > ---------------------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em
> > http://www.listas-discussao.cjb.net
> > ---------------------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> >
> > Links do Yahoo! Grupos
> >
> >
> >
> >
> >
> >
> >
> >
>
>
> --
> []'s
> Alfredo Casanova
> icq: 15793271
> msn: address@hidden
> aim: alfredotcasanova
> yim: atcasanova2
> tel: +55 61 84137319
> As aves têm na boca um dente chamado bico
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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