Re: GREP: D?vi da com express?o regular
Matias Schweizer <matias-7pUm/SSSJFa7hsvYdc9FTl/I71DsQ//[email protected]> Wed, 19 Sep 2007 12:42:16 -0300
| Newsgroups | gmane.org.user-groups.linux.parana |
|---|---|
| Message-ID | <[email protected]> |
> >N verdade os "escapes" não funcionam muito bem no "[ ]", mas passar o "-" para o fim do padrão parece fumcionar também : Realmente foi isso. Eu apenas mudei o - para o começo, ao invés do final. tks. []´s >echo "<<mailto:matias%40spmo-delismo.com.br>matias-EQc7d3XahTW9lAl/[email protected]>"|grep -m 1 -o -e '[a-z0-9_.-]*@[a-z0-9.-]*[a-z0-9-]*'|tail -n 1 > >OBS: Eu usei (') em lugar de (") para que a shell não tente expandir os >padrões d pesuisa, o que poderia produzir alguns resultados bem >esquisitos. ;) > >Para exemplificar o problema dos (aparentes) "escapes" no padrão interno >do "[ ]" aà vão dois exemplos usando (') em lugar de (") : > >echo '<mat\<mailto:ias%40spmo-delismo.com.br>ias-EQc7d3XahTW9lAl/[email protected]>'|grep -m 1 -o -e '[a-z0-9_.-]*@[a-z0-9.-]*[a-z0-9-]*'|tail -n 1 ><mailto:ias%40spmo-delismo.com.br>ias-EQc7d3XahTW9lAl/[email protected] > >echo '<mat\<mailto:ias%40spmo-delismo.com.br>ias-EQc7d3XahTW9lAl/[email protected]>'|grep -m 1 -o -e '[a-z0-9_.-\]*@[a-z0-9.-]*[a-z0-9-]*'|tail -n 1 >mat\<mailto:ias%40spmo-delismo.com.br>ias-EQc7d3XahTW9lAl/[email protected] > >Como pode ser visto nos exemplos acima, o "\" dentro do "[ ]" se torna >apenas mais um caráter da pesquisa, em lugar de um "escape" como esperado. > >(/me *acha* que "-" não é caráter válido para nomes de máquinas ou >domÃnios, mas estou com preguiça de verificar a RFC correspondente;)) > >Hmmmm..... Houston, acho que temos um problema, como resolver então ? > >Bem, como em qualquer área de TI, se nada funciona a gente consulta o >manual ;) : > >$ man 7 regex >REGEX(7) REGEX(7) > >NAME >regex - POSIX.2 regular expressions > >DESCRIPTION >Regular expressions (``RE''s), as defined in POSIX.2, come in two >========8<------- indo para onde interessa ----------------- > >To include a literal `]' in the list, make it the first character (fol- >lowing a possible `^'). To include a literal `-', make it the first or >last character, or the second endpoint of a range. To use a literal >`-' as the first endpoint of a range, enclose it in `[.' and `.]' to >make it a collating element (see below). With the exception of these >and some combinations using `[' (see next paragraphs), all other spe- >cial characters, including `\', lose their special significance within >a bracket expression. > >========8<------- o resto no manual, vale a leitura ---------- > >Ah !!! O texto acima explica porque ao colocar o "-" no fim da relação >a pesquisa funcionou como esperado. O parágrafo também nos ajuda a >compreender porque o "\" não funciona como um filtro, como poderia parecer >para os desavisados. Ao colocar o "\" antes do "-" o que se fez foi >separar o "-" da faixa anterior, que era o erro reportado. O texto acima >é bem enfático em reforçar que não se pode compartilhar extremos de faixas >de pesquisa. > >Resumo, se nada funcionar : RTFM ;) > >Roxo > >-- >---------------- Non luctari, ludare -------------------+ WYSIWYG Editor ? >Fernando M. Roxo da Motta <<mailto:roxo%40roxo.org>[email protected]> | VI !! >Except where explicitly stated I speak on my own behalf.| I see text, >( Usuário Linux registrado #39505 ) | I get text ! > > Matias Schweizer matias-7pUm/SSSJFa7hsvYdc9FTl/I71DsQ//[email protected] SCHNAUZER Plastimodelismo http://www.spmodelismo.com.br/