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: Wed, 4 Oct 2006 22:50:32 -0300

Olá Mestre Julio,

no meu sistema, o resultado usando shell puro não bateu conforme esperado:
----
$ PING='ping teste.com (69.36.226.134): 56 data bytes'; P1=`echo
${PING#*(}`; echo ${P1%)*}
ping teste.com (69.36.226.134
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Este foi o Resultado...
----
Ou seja ele não filtrou o conteúdo antes do parênteses. Seria alguma
variável de ambiente?

[]s
Sergio.



2006/10/3, Julio C. Neves <address@hidden>:
>
> 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]
>
> 
>


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



reply via email to

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