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: Julio C. Neves
Subject: Re: [shell-script] selecionar substring
Date: Tue, 3 Oct 2006 09:18:28 -0300

Epa quero pegar uma carona na resposta do Sergio

2006/10/2, Sergio Nery Simoes <address@hidden>:
>
> 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).
>

No meu conceito isso é o maior furo dos utilitários GNU. fgrep significa
"fast grep" ou grep rápido e foi desenvolvido para não se preocupar em
resolver ERs, mas ser o mais veloz possível. E como o Sérgio acabou de
dizer, isso no GNU grep não é verdade. Por ser um script (escrito em Shell)
que chama o grep, ele torna-se mais lento. Em tempo o egrep tb é um script
que chama o grep. Verifiquem!

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.
>

Concordo com a preleção, mas o problema é que só podemos ter certeza após
testes para mensurar o tempo de execução e se alguém for fazer este teste,
peço que teste tb algo em Shell puro que, teoricamente, deveria ser mais
veloz.

$ PING='PING teste.com (69.36.226.134): 56 data bytes'
$ P1=`echo ${PING#*(}`
$ echo ${P1%)*}
69.36.226.134

ou, para facilitar o cópia e cola:

$ PING='PING teste.com (69.36.226.134): 56 data bytes'; P1=`echo
${PING#*(}`; echo ${P1%)*}

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
>

Forma Shell puro:
PING='ping teste.com (69.36.226.134): 56 data bytes'; P1=`echo ${PING#*(}`;
echo ${P1%)*}

====
>
> Sergio.
>

Abraços,
Julio
:wq


+++++++++++++++++=
>
> 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]
>
> 
>



-- 
Abraços,
Julio
http://www.julioneves.com - Um livro sobre Bash completo e on-line
:wq


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



reply via email to

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