Epa quero pegar uma carona na resposta do Sergio 2006/10/2, Sergio Nery Simoes <[EMAIL PROTECTED]>: > > 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 <[EMAIL PROTECTED]>: > > > > 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 <[EMAIL PROTECTED]> > > wrote: > > > > > > On Mon, 02 Oct 2006 18:37:12 -0300, Celso Viana < > [EMAIL PROTECTED]> > > > wrote: > > > > 2006/10/2, Humberto Pereira <[EMAIL PROTECTED]>: > > > > 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. > > > > > > [EMAIL PROTECTED] 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 > > > [EMAIL PROTECTED] 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: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > > > 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: [EMAIL PROTECTED] > > 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] --------------------------------------------------------------------- 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: [EMAIL PROTECTED] --------------------------------------------------------------------- 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 <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/shell-script/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html