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