Prompt-doc: Expressões Regulares

II CCSL - Joinville, 09 de Outubro de 2004

Este é o histórico da linha de comando da palestra de Expressões Regulares que ministrei no II Congresso Catarinense de Software Livre em Joiville - SC.

As Expressões Regulares são uma simbologia, um método de se descrever padrões de texto complicados ou posicionais, como "números no final da linha" ou "palavras repetidas na mesma linha".

  • Data: 09-Out-2004
  • Horário: 10:00
  • Duração: 1 hora
  • Local: Centreventos
  • Participantes: 70 pessoas
  • Requisitos: Nenhum

Usando o cat para que a ER fique no final da linha

$ egrep root /etc/passwd
$ cat /etc/passwd | egrep root

As âncoras ^ e $ para começo e fim de linha

$ cat /etc/passwd | egrep te
$ cat /etc/passwd | egrep ^te
$ cat /etc/passwd | egrep bash$

O ou de caracteres [] (lista) e o OU de palavras | (pipe)

$ cat /etc/passwd | egrep '^[aeiou]'
$ cat /etc/passwd | egrep '^[aeiou][aeiou]'
$ cat /etc/passwd | egrep '^(root|uucp)'
$ cat /etc/passwd | egrep '^(root|[aeiou][aeouiii])'
$ cat /etc/passwd | egrep '^[aeiou]'

Intervalos em listas []

$ cat /etc/passwd | egrep '[0-9][0-9]'
$ cat /etc/passwd | egrep '[0-9][0-9][0-9]'
$ man ascii

O curinga . (ponto)

$ cat /etc/passwd | egrep '^[aeiou]'
$ cat /etc/passwd | egrep '^.[aeiou]'

O repetidor {} (chaves)

$ cat /etc/passwd | egrep '^..[aeiou]'
$ cat /etc/passwd | egrep '^...[aeiou]'
$ cat /etc/passwd | egrep '^.{9}[aeiou]'

$ cat /etc/passwd |  grep '^.\{9\}[aeiou]'

$ cat /etc/passwd | egrep '^.{5,9}[aeiou]'
$ cat /etc/passwd | egrep '^[aeiou].{5,9}[aeiou]'
$ cat /etc/passwd | egrep '^s.{5,9}[aeiou]'
$ cat /etc/passwd | egrep '^(s.){5,9}[aeiou]'

A criptonita \

$ echo '[chaves]'  | egrep '['
$ echo '[chaves]'  | egrep '\['
$ echo '[chav\es]' | egrep '\\'

Metacaracteres vistos até agora

$ #         ^    $    []    .    {}    ()

Cuidado ao usar a lista negada!

$ cat /etc/passwd | egrep '^[aeiou]'
$ cat /etc/passwd | egrep '^[^aeiou]'
$ echo @@@@@@@@@@ | egrep '^[^aeiou]'

Os atalhos ? * +

$ #               *      +      ?
$ #             {0,}    {1,}   {0,1}

ER simples para casar uma data

$ echo 12/31/2004 | egrep '[0-9][0-9]/[0-9]{2}/[0-9]{4}'
$ echo 99/99/2004 | egrep '[0-9][0-9]/[0-9]{2}/[0-9]{4}'

Usando o SED para substituir a data por uma string

$ echo 12/31/2004 | sed -r 's@[0-9][0-9]/[0-9]{2}/[0-9]{4}@nada@'
$ echo 12/31/2004 | sed -r 's@([0-9][0-9])/([0-9]{2})/([0-9]{4})@nada@'

Usando SED e retrovisores para trocar de MM/DD/AAAA para DD.MM.AAAA

$ echo 12/31/2004 | sed -r 's@([0-9][0-9])/([0-9]{2})/([0-9]{4})@\1.\2.\3@'
$ echo 12/31/2004 | sed -r 's@([0-9][0-9])/([0-9]{2})/([0-9]{4})@\2.\1.\3@'
$ echo 12/31/2004 | sed -r 's@([0-9][0-9])/([0-9]{2})/([0-9]{4})@\2-\1-\3@'
— EOF —

Gostou desse texto? Aqui tem mais.