Prompt-doc: Expressões Regulares

Aurelio Marinho Jargas
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.


Expressões Regulares

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".

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@'

Voltar para a página do relato do curso