Anda di halaman 1dari 10

Expresses regulares

Expresso regular um conjunto de expresses que funcionam de forma semelhante as expresses aritmticas, utilizando operadores para fazer combinaes com expresses menores. Existem dois tipos de expresses regulares: Simples - utiliza os caracteres numricos e os caracteres: *, ., ^, $, e [ ]. Estendidas - utiliza os caracteres numricos e os caracteres: *, ., ?, +, ^, $, {, }, [, ], (, ), |, \< e \>. Abaixo segue a tabela dos metacaracteres utilizados nas expresses regulares. Metacaractere ^ $ Nome circunflexo cifro Indica o comeo de linha Indica o final de linha Texto [abc] [a-z] [^abc] (abc|aeiou) lista lista Encontra ocorrncias com as letras a ou b ou c Encontra ocorrncias com as letras de a z Posio

lista de negao Encontra ocorrncias que no tenham as letras de a, b e c ou Encontra ocorrncias que tenham as letras de a, b e c ou as vogais aeiou Quantidade

a{3} a{1,3} a{3,}

chaves chaves chaves

Combina a letra a trs vezes Combina a letra a de 1 3 vezes Combina a letra a no mnimo trs vezes Quantidade

a? a* a+

opcional asterisco mais

Combina a letra a zero ou uma vez Combina a letra a zero ou mais vezes Combina a letra a uma ou mais vezes Curingas

. .*

ponto curinga

Encontra qualquer caractere Encontra qualquer coisa

As expresses regulares so utilizadas no shell do Linux atravs dos comandos de filtragem grep, egrep, fgrep e sed e pelas linguagens awk, perl e etc.

Atravs de expresses regulares, podemos filtrar ou validar textos como: data e horrio, endereo IP, endereo de email, RG, CPF, Cep, telefone, dados de uma coluna ou linha de um texto, etc.

Para mostrar os exemplos abaixo, usaremos o comando grep, o arquivo /etc/passwd e criaremos os arquivos palavras.txt, letras.txt e numeros.txt.

$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh Debian-exim:x:100:102::/var/spool/exim4:/bin/false statd:x:101:65534::/var/lib/nfs:/bin/false identd:x:102:65534::/var/run/identd:/bin/false messagebus:x:103:104::/var/run/dbus:/bin/false avahi:x:104:105:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false haldaemon:x:105:108:Hardware abstraction layer,,,:/home/haldaemon:/bin/false postgres:x:106:112:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash gdm:x:107:113:Gnome Display Manager:/var/lib/gdm:/bin/false hplip:x:108:7:HPLIP system user,,,:/var/run/hplip:/bin/false aluno1:x:1000:1000:aluno1,,,:/home/aluno1:/bin/bash sshd:x:109:65534::/var/run/sshd:/usr/sbin/nologin mysql:x:110:115:MySQL Server,,,:/var/lib/mysql:/bin/false

oracle:x:1003:1003::/usr/lib/oracle/xe:/bin/bash bind:x:111:116::/var/cache/bind:/bin/false

$ cat > palavras.txt Linux Linus Tovalds O criador do Linux Seja livre use Linux linux liberdade alunos Projeto Linux Brasil Aperte ENTER Aperte CTRL+D

O circunflexo ^

Video exemplo

O caractere circunflexo representa um texto no inicio da linha.

Exemplos:

$ grep Linux palavras.txt Linux O criador do Linux No exemplo acima, retornam todas as ocorrncias da palavra Linux. $ grep ^Linux palavras.txt Linux Agora, colocando o ^circunflexo, retorna apenas a primeira linha que comea com a palavra Linux. Voc tambm pode especificar a string com o caractere dentro de aspas simples ou duplas. $ grep '^Linux' palavras.txt

$ grep "^Linux" palavras.txt

O cifro $

Video exemplo

O caractere cifro representa um texto no final da linha.

Exemplo:

$ grep /bin/bash$ /etc/passwd root:x:0:0:root:/root:/bin/bash aluno1:x:1000:1000:aluno1,,,:/home/aluno1:/bin/bash

O colchete [ ]

Video exemplo

O colchete ou lista, representa um intervalo de caracteres especificados dentro dos colchetes, podendo ser nmeros ou letras, por exemplo os nmeros de 0 9 [0-9] e as letras de a z [a-z], veja o exemplo abaixo:

Exemplos: Retornam somente as palavras Linux em maisculo $ grep 'Linux' palavras.txt Retornam somente as palavras linux em minsculo $ grep 'linux' palavras.txt Neste caso, usaremos o colchete usando a letra L maisculo e l minsculo entre colchete [Ll] para retornar tanto as palavras Linux em maisculo e linux em minsculo. $ grep '[Ll]inux' palavras.txt

O ponto .

Video exemplo

O caractere ponto, representa qualquer letra, ou seja, qualquer caractere em uma determinada posio, podendo ser tambm um nmero, um smbolo, um espao, um TAB, ou seja, qualquer caractere.

Exemplos: $ cat palavras.txt Linux Linus Tovalds O criador do Linux Seja livre use Linux linux liberdade alunos Projeto Linux Brasil No exemplo abaixo retorna somente qualquer caractere a partir do comeo da linha que vem seguido de uma vogal, repare que no retornam as frases "Projeto Linux Brasil" e "O criador do Linux", pois a letra P de "Projeto Linux Brasil" e a letra O de "O criador de Linux" no vem seguidas de uma vogal. Abaixo exibido qualquer caractere seguido de uma vogal. $ grep '^.[aeiou]' palavras.txt Linux Linus Tovalds Seja livre use Linux linux liberdade Neste exemplo, retornam apenas as palavras com qualquer caractere, vem seguido das letras inu e que termina com x. $ grep '^.[inu]*x' palavras.txt Linux linux Outro exemplo semelhante ao citado acima, voc usar o ponto para procurar tamanho fixo de uma string, sem depender de seu contedo.

No exemplo abaixo, retornam apenas as palavras que tem 5 caracteres, onde ^ o incio da linha e $ o fim da linha.

$ grep '^.....$' palavras.txt Linux linux

As chaves { }

Video exemplo

Um nmero dentro de chaves representa a quantidade de repeties do caractere anterior.

Exemplos: Este exemplo semelhante ao anterior, especificando o nmero de caracteres e no pontos. Observe que foi usado o comando egrep e no grep , pois as chaves { } fazem parte das expresses regulares estendidas (avanadas). $ egrep '^.{5}$' palavras.txt Linux linux Para usar o grep teramos que colocar a \ barra invertida antes das chaves, por isso, mais fcil usar o egrep nestes casos. $ grep '^.\{5\}$' palavras.txt Linux linux As chaves aceitam um intervalo especificando uma faixa de repeties com um valor mnimo e mximo.

No exemplo abaixo, retornam as linhas que tenham entre 5 e 9 caracteres. $ egrep '^.{5,9}$' palavras.txt Linux linux liberdade alunos

Caso voc no especifique o segundo nmero e mantenha a vrgula, ficar uma faixa infinita de caracteres.

No exemplo abaixo, sero exibidas as linhas que tm 9 ou mais caracteres.

$ egrep '^.{9,}$' palavras.txt Linus Tovalds O criador do Linux Seja livre use Linux liberdade Projeto Linux Brasil Este exemplo abaixo, retorna todos os usurios que possuem o UID ou GID maior que 4 caracteres numricos de 0 9 [0-9]. $ egrep '[0-9]{4,}' /etc/passwd sync:x:4:65534:sync:/bin:/bin/sync nobody:x:65534:65534:nobody:/nonexistent:/bin/sh statd:x:101:65534::/var/lib/nfs:/bin/false identd:x:102:65534::/var/run/identd:/bin/false aluno1:x:1000:1000:aluno1,,,:/home/aluno1:/bin/bash sshd:x:109:65534::/var/run/sshd:/usr/sbin/nologin oracle:x:1003:1003::/usr/lib/oracle/xe:/bin/bash

O curinga .* (ponto asterstico) (AND)

Video exemplo

O caractere .* ponto asterisco representa qualquer coisa, inclusive, nada entre partes de uma linha no importando o que h de contedo. O .* (AND) funciona de forma semelhante a um AND lgico em linguagens de programao, ou seja, somente exibe o resultado da pesquisa se encontrar ambas as partes da pesquisa.

Exemplos: Neste exemplo so exibidos os usurios que comeam com letras de a z [a-z] e terminam com a palavra bash. $ egrep '^[a-z].*bash$' /etc/passwd root:x:0:0:root:/root:/bin/bash postgres:x:106:112:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash aluno1:x:1000:1000:aluno1,,,:/home/aluno1:/bin/bash oracle:x:1003:1003::/usr/lib/oracle/xe:/bin/bash

O or | (barra em p) (OR)

Video exemplo

O caractere pipe | barra em p representa em uma pesquisa para procurar uma coisa ou outra. O | (OR) deve ser usado dentro de parnteses ( ) e funciona de forma semelhante a um OR lgico em linguagens de programao, ou seja, exibe o resultado da pesquisa se encontrar uma das partes da pesquisa.

Exemplos: Neste exemplo so exibidos as palavras que comeam com palavras Linux ou linux ou Linus. $ egrep '^(Linux|linux|Linus)' palavras.txt Linux Linus Tovalds linux

Os repetidores ? + * Os caracteres interrogao (chamado de opcional), o mais e o asterisco so repetidores que especificam a quantidade e funcionam como as chaves { }. Caractere ? + * Nome opcional mais asterisco Equivale {0,1} {1,} {0,} Significado Aparece ou no (opcional) Aparece no mnimo uma vez Aparece em qualquer quantidade

Lista de negao [^]

Video exemplo

Podemos especificar o caractere circunflexo dentro de colchetes para negar uma expresso.

Exemplos: No exemplo abaixo so mostradas as linhas que no comeam com vogais, repare que a palavra alunos no exibida, pois comea com vogal.

$ cat palavras.txt Linux Linus Tovalds O criador do Linux Seja livre use Linux linux liberdade Projeto Linux Brasil alunos

$ grep '^[^aeiou]' palavras.txt Linux Linus Tovalds O criador do Linux Seja livre use Linux linux liberdade Projeto Linux Brasil

Intervalo de lista [-]

Video exemplo

Podemos especificar um hfen dentro de colchetes, para indicar um intervalo entre duas letras que ser estendido para todas as letras dentro do intervalo. Por exemplo [a-f] quer dizer para retornar todas as letras no intervalo de a f [abcdef] ou [0-9] para retorna todos os nmeros de 0 9 [0123456789].

Exemplos: No exemplo abaixo so mostradas as linhas que esto no intervalo de a f. $ cat > letras.txt abcdefghij defabc abcdef rpzstq xwzkwmp Aperte ENTER Aperte CTRL+D

$ egrep '[a-f]' letras.txt abcdefghij defabc abcdef Neste exemplo abaixo, exibimos somente as linhas com as letras que no esto no intervalo de [a-f], repare que exibida a linha com as letras de [abcdefghij], pois as letras ghij esto fora do intervalo de [a-f]. $ egrep '[^a-f]' letras.txt abcdefghij rpzstq xwzkwmp Neste exemplo abaixo, exibimos somente as linhas com os nmeros que comeam com 1 (102, 15 e 111) e que tenha 3 dgitos {0,1,2} Ex: 102 e 111 . $ cat > numeros.txt 102 15 9 111 1024 10555 Aperte ENTER Aperte CTRL+D

$ egrep '^1[0-9]{0,2}$' numeros.txt 102 15 111 ou com grep usando escape nas chaves com barra invertida \. $ grep '^1[0-9]\{0,2\}$' numeros.txt 102 15 111

10