Re: GREP: Dúvida com expressão regular

"Marcelo Beckmann" <[email protected]> Fri, 13 Jul 2007 15:27:25 -0300
Newsgroups gmane.org.user-groups.linux.parana
Message-ID <[email protected]>
On 7/6/07, Matias Schweizer <matias-7pUm/SSSJFa7hsvYdc9FTl/I71DsQ//[email protected]> wrote:
>
>         Pessoal:
>
>         Estou com um pequeno mistério aqui. Estou fazendo uma   expressão regular, para identificar/pegar um email dentro
>         de uma linha qq. Faço o seguinte:
>
> echo $line|grep -m 1 -o -e "[a-z0-\9\-_\.]*@[a-z0-9\-\.]*[a-z0-9\-]*"|tail -n 1
>
>         Na verdade, a expressão original era:
>
> grep -m 1 -o -e "[a-z0-9-_.]*@[a-z0-9-.]*[a-z0-9-]*"|tail -n 1
>
>         No entanto, testando um duas máquinas (uma Slackware e
>         outra RH), na RH acontece isso:
>
> echo "<matias-7pUm/SSSJFa7hsvYdc9FTl/I71DsQ//[email protected]>"|grep -m 1 -o -e "[a-z0-9-_.]*@[a-z0-9-.]*[a-z0-9-]*"|tail -n 1
> grep: Invalid range end

Parece-me que tem erro de range mesmo, veja:
a-z0-9-.
um intervalo de "a" a "z", outro intervalo de "0" a "9" a "." ?

Testando aqui, num fedora 7:

[beckmann@beckmann tmp]$ echo "<matias-7pUm/SSSJFa7hsvYdc9FTl/I71DsQ//[email protected]>"|grep -m 1
-o -e "[a-z0-9-_.]*@[a-z0-9-.]*[a-z0-9-]*"|tail -n 1
grep: Intervalo final inválida


Corrigindo os intervalos (escapando alguns dos -)

[beckmann@beckmann tmp]$ echo "<matias-7pUm/SSSJFa7hsvYdc9FTl/I71DsQ//[email protected]>"|grep -m 1
-o -e "[a-z0-9\-_\.]*@[a-z0-9\-\.]*[a-z0-9\-]*"|tail -n 1
matias-7pUm/SSSJFa7hsvYdc9FTl/I71DsQ//[email protected]

[beckmann@beckmann tmp]$ grep --version
grep (GNU grep) 2.5.1

[beckmann@beckmann tmp]$ bash --version
GNU bash, version 3.2.9(1)-release (i686-redhat-linux-gnu)


>         Na maquina original, funciona.
>
>         Ambos os grep são 2.5.1 e ambos os bash são 2.5b. Além de
>         tudo, quando eu copio um /bin/grep para essa maquina RH,
>         o erro que não aparecia, ocorre na maquina RH.
>
>         Independente da expressão regular estar certa ou errada,
>         alguém explica esse comportamento?

[root@beckmann ~]# ldd /bin/grep
        linux-gate.so.1 =>  (0x00ffb000)
        libpcre.so.0 => /lib/libpcre.so.0 (0x00a8d000)
        libc.so.6 => /lib/libc.so.6 (0x00c05000)
        /lib/ld-linux.so.2 (0x0063d000)

Talvez devido a diferenças de bibliotecas dinâmicas que o grep usa em
um ambiente e no outro :)


[]s
--
Marcelo Beckmann