Poxa Julio, Vivendo e aprendendo com a história. Aqui no trabalho sempre uso o egrep nas estações solaris e nunca tive a curiosidade de checar a diferença de performance, tenho uns scripts grandes que posso estar perdendo em performance sem necessidade do egrep.
Obrigado. On 12/5/07, Julio C. Neves <[EMAIL PROTECTED]> wrote: > > Fala André, > vc está não está off-topic e ainda vou acrescentar umas dicas ao que vc > falou: > > O Unix tem uma família composta por 3 caras: fgrep que não sabe nada de > regexp, grep que só conhece regexps básicas e egrep que sabe tudo de > regexp. > Escrevi na ordem de performance onde cada um é cerca de 20% mais veloz que > o > seguinte. > > Qdo o Linux usa o egrep e o fgrep como scripts para chamar o grep -E e o > grep -f respectivamente, temos o pior mundo possível, ou seja, sempre > executaremos um o código mais pesado. > > Abraços, > Julio > > Em 05/12/07, André Saunite <[EMAIL PROTECTED] <saunite%40gmail.com>> > escreveu: > > > > Apenas para conhecimento histórico, > > > > Nos unix mais antigos o egrep é uma implementação diferente do grep, > > com suporte a ER completas, como a versão GNU já foi desenvolvida com > > todo esse suporte através da expressão "-E" o seu egrep é apenas um > > shell script que chama o "grep -E" (até onde eu sei é apenas para > > backward compatibility), > > > > Acho interessante divulgar esse tipo de coisa para evitar que usuários > > que tem mais contato com UNIX através do Linux não desperdicem tempo > > procurando por soluções de problemas desse tipo quando necessitarem > > utilizar outras variações de UNIX, > > > > Por favor se eu estiver sendo "off-topic" me avisem! :o) > > > > Abs, > > André > > > > > > On Dec 5, 2007 5:04 PM, Flavio Junior <[EMAIL PROTECTED]<billpp%40gmail.com> > <billpp%40gmail.com>> > > wrote: > > > > > > > > > > > > > > > > > > > > > Na real grep ou egrep (que nada mais é que o grep -E) ta sendo usado > > > de forma errada. > > > O grep retorna a LINHA toda que casar com a expressão, pra evitar isso > > > precisa usar a opção "-o" do grep/grep -E. > > > > > > Ou seja, faça: > > > > > > $ grep -Eo 'expressão' arquivo > > > > > > Quanto ao site, não sei :).. > > > > > > -- > > > > > > Flávio do Carmo Júnior > > > > > > > > > > > > On Dec 5, 2007 4:59 PM, André Saunite <[EMAIL > > > PROTECTED]<saunite%40gmail.com> > <saunite%40gmail.com>> > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > Fala Benito! > > > > > > > > O problema é que você tá usando o grep em vez do egrep! O grep não é > > > > muito bom com expressões regulares mais complexas, para essas é > > > > preciso utilzar o egrep. > > > > > > > > [ 16:56:30:eandsau@ ~ $ ] echo GG48LH33|grep > > > "([A-Z]{2}[0-9]{2})+[A-Z]{2}?" > > > > [ 16:56:37:eandsau@ ~ $ ] echo GG48LH33|egrep > > > > "([A-Z]{2}[0-9]{2})+[A-Z]{2}?" > > > > GG48LH33 > > > > > > > > Abração! > > > > André Saunite > > > > > > > > On Dec 5, 2007 4:56 PM, Josenivaldo Benito Junior > > > > > > > > > > > > <[EMAIL PROTECTED] > > > > <jrbenito%40benito.qsl.br><jrbenito%40benito.qsl.br>> wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Só acrescentando, > > > > > > > > > > o site http://regexpal.com/ > > > > > > > > > > Também interpreta ao ER do Thiago diferente. Ele da match em > strings > > de > > > 6 > > > > > digitos mas não da match em 4 digitos nem em 8 como o sed. Alguma > > > > > explicação > > > > > para isso? > > > > > > > > > > Exemplo usado no site: > > > > > > > > > > JJ34 => não pega > > > > > GG47LH => pega > > > > > FG37LL33 => não pega > > > > > FG37LL33JK ==> pega > > > > > > > > > > Todas são válidas. No sed fica assim: > > > > > > > > > > > > > > > [rdlxsr02][wjb069_teDebug][/home/sw/wjb069] > > > > > > cat ttt | sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/' > > > > > |JJ34| > > > > > |GG47LH| > > > > > |FG37LL33| > > > > > |FG37LL33JK| > > > > > > > > > > Ou seja, pega todas! > > > > > > > > > > Muito obrigado, > > > > > Benito. > > > > > > > > > > > > > > > On 12/5/07, Josenivaldo Benito Junior <[EMAIL > > > > > PROTECTED]<jrbenito%40benito.qsl.br> > <jrbenito%40benito.qsl.br>> > > > wrote: > > > > > > > > > > > > > > > > > Oi, > > > > > > > > > > > > eu acho que expressei-me mau. > > > > > > > > > > > > não existe a forma > > > > > > > > > > > > GG482733 (que sua expressão pegaria) > > > > > > > > > > > > O formato correto é: duas letras+dois números+duas letras+dois > > > > > > números+duas letras > > > > > > > > > > > > O comprimento total é no máximo 12, mas o mais comum é 4 ou 6 > como > > > por > > > > > > exemplo: > > > > > > > > > > > > GG48LH > > > > > > GG67 > > > > > > GG48 > > > > > > JH32HG > > > > > > ... > > > > > > > > > > > > É mais ou menos assim: > > > > > > > > > > > > GG -> indica uma grade grande (de latitude e longitude) > (quadrada) > > > > > > GG48 -> se você dividir o quadro GG em pedacinhos (o tamanho não > > vem > > > ao > > > > > > caso), GG48 representa um dos pedacinhos de GG (um quadro) > > > > > > GG48LH -> novamente, divide o quadro GG48 em vários pedaços e > > GG48LH > > > é > > > > um > > > > > > desses pedaços, GG48JG é outro e assim vai. > > > > > > > > > > > > Exemplo prático: > > > > > > > > > > > > O localizador da minha residência é GG67MH (com 6 digitos). > > > Dependendo > > > > da > > > > > > aplicação eu posso informar: > > > > > > > > > > > > GG67 (menos preciso) > > > > > > GG67MH (mais preciso) > > > > > > > > > > > > Então, o comum na aplicação é aparecerem localizadores, um por > > linha, > > > > > > assim: > > > > > > > > > > > > GG67 > > > > > > GG35AF > > > > > > GG67MH > > > > > > GG48LH > > > > > > GG67LH > > > > > > DF45OP > > > > > > DF54 > > > > > > > > > > > > Eventualmente podem aparecer: > > > > > > > > > > > > GG67AF33 > > > > > > JH34RD25ES > > > > > > > > > > > > Mas não estou me preocupando com estes casos, posso cortá-los em > 6 > > > > > digitos > > > > > > sem perda de informação relevante à minha aplicação. Cortando > > esses > > > > dois > > > > > > exemplo fica: > > > > > > > > > > > > GG67AF > > > > > > JH34RD > > > > > > > > > > > > Mas, não posso aumentar um grid de 4 digitos para para 6 > > > > arbitrariamente, > > > > > > por exemplo: > > > > > > > > > > > > usuário entra com GG48 > > > > > > eu não posso assumir GG48LH ou GG48JH ou GG48EJ ... tenho que > > > > considerar > > > > > > apenas GG48 > > > > > > > > > > > > O que eu tentei fazer inicialmente era consistir qualquer > > sequencia > > > > > > agrupada de duas letras+dois numeros+duas letras+dois numeros e > > assim > > > > por > > > > > > diante. Só para ter certeza que não entrem coisas inválidas > como? > > > > > > > > > > > > GGLH > > > > > > ou > > > > > > 2235 > > > > > > ou > > > > > > 22LH > > > > > > (tem que começar por letra obrigatoriamente e sempre apos duas > > letras > > > > vem > > > > > > um numero, depois pode vir duas letras e assim vai) > > > > > > > > > > > > De fato, o que preciso é que, independente do comprimento (que > eu > > > > sempre > > > > > > vou garantir ser maior que 4), a string comece por duas letras > > > seguidas > > > > > por > > > > > > dois numeros, eventualmente seguidos por mais duas letras que, > > > > > > eventualmente, podem estar seguidas de dois números e assim por > > > diante. > > > > > > > > > > > > A expressão do Thiago acertou na lata. Mas, existe algum motivo > > > > especial > > > > > > para não funcionar no grep? Tipo: > > > > > > > > > > > > [rdlxsr02][wjb069_teDebug][/home/sw/wjb069] > > > > > > > echo GG48LH|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/' > > > > > > |GG48LH| > > > > > > > > > > > > [rdlxsr02][wjb069_teDebug][/home/sw/wjb069] > > > > > > > echo GG48|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/' > > > > > > |GG48| > > > > > > > > > > > > [rdlxsr02][wjb069_teDebug][/home/sw/wjb069] > > > > > > > echo GG48LH33|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/' > > > > > > |GG48LH33| > > > > > > > > > > > > [rdlxsr02][wjb069_teDebug][/home/sw/wjb069] > > > > > > > echo GG48LH33|grep '([A-Z]{2}[0-9]{2})+[A-Z]{2}?' > > > > > > > > > > > > [rdlxsr02][wjb069_teDebug][/home/sw/wjb069] > > > > > > > echo GG48LH33|grep "([A-Z]{2}[0-9]{2})+[A-Z]{2}?" > > > > > > > > > > > > > > > > > > O grep não imprime o match. Comi bronha? > > > > > > > > > > > > > > > > > > Obrigado pelas dicas de todos > > > > > > Abraço > > > > > > Benito > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 12/5/07, voyeg3r < [EMAIL PROTECTED]<voyeg3r%40yahoo.com.br> > <voyeg3r%40yahoo.com.br>> > > wrote: > > > > > > > > > > > > > > --- Em > > > > > shell-script@yahoogrupos.com.br<shell-script%40yahoogrupos.com.br><shell-script%40yahoogrupos.com.br> > > <shell-script%40yahoogrupos.com.br>, > > > > > > > "Josenivaldo Benito Junior" > > > > > > > <[EMAIL PROTECTED]> escreveu > > > > > > > > > > > > > > > > Olá turma, > > > > > > > > > > > > > > > > Estou apanhando de uma expressão regular. Para ser sincero > já > > não > > > > > > > sei dizer > > > > > > > > se ela é possível (deve ser o sono). > > > > > > > > > > > > > > > > Preciso pegar strings do tipo: > > > > > > > > > > > > > > > > GG48LH > > > > > > > > JH23 > > > > > > > > JH45ER > > > > > > > > FJ87SA76 > > > > > > > > > > > > > > > > Resumindo: > > > > > > > > > > > > > > > > Sempre tem duas letras (de A até Z) seguidas de dois números > > (de > > > 0 > > > > > > > até 9), > > > > > > > > podendo estar seguidos mais duas letras, podendo estar > seguido > > de > > > > > > > mais dois > > > > > > > > números. (duas letras,dois nros., duas letras, dois nros). > Mas > > a > > > > > > > informação > > > > > > > > pode ter 2,4,6 ou 8 letras (1,2,3 ou 4 conjuntos de letras e > > > > > números). > > > > > > > > > > > > > > > > O que são essas coisas? Coordenadas em formato World > Locator. > > De > > > > > > > fato podem > > > > > > > > ir até 12 algarismos, o comum é 4 ou 6. Na aplicação que > estou > > > > > > > tentando > > > > > > > > capturar podem chegar a 8. > > > > > > > > > > > > > > > > Tentei algumas coisas básicas. O mais próximo que cheguei > foi: > > > > > > > > > > > > > > > > [A-Z]{2}[0-9]{2} > > > > > > > > > > > > > > ============================ > > > > > > > se o conjunto de números pode ir até 6 faça: > > > > > > > > > > > > > > [A-Z]{2}[0-9]{2,6} > > > > > > > > > > > > > > > > > > > > > > > Que pega um par de letras somente se for seguido de um par > de > > > > > > > números. Para > > > > > > > > uma string tipo GG48LH23JV vai funcionar em dois matches, > tem > > > algum > > > > > > > problema > > > > > > > > nisso? > > > > > > > > > > > > > > > > Pegar um par de letras+um par de números e assim por diante, > > não > > > > > > > resolve > > > > > > > > toda a situação, pois em 90% dos casos são usados 6 > algarismos > > > (ex: > > > > > > > GG67MH). > > > > > > > > > > > > > > > > Alguém pode me dar uma dica? > > > > > > > > > > > > > > > > Valeu. > > > > > > > > Benito > > > > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram > > > removidas] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > ------------------------------------ > > > > André Marques Saunite > > > > e-mail/MSN: [EMAIL PROTECTED] <saunite%40gmail.com><saunite%40gmail.com> > > > > Linux User - 308676 > > > > ------------------------------------ > > > > > > > > > > > > > > > > > > > -- > > ------------------------------------ > > André Marques Saunite > > e-mail/MSN: [EMAIL PROTECTED] <saunite%40gmail.com><saunite%40gmail.com> > > Linux User - 308676 > > ------------------------------------ > > > > > > > > -- > Abraços, > Julio > Feliz Natal > :wq > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas]