• Nenhum resultado encontrado

Expressões regulares

N/A
N/A
Protected

Academic year: 2021

Share "Expressões regulares"

Copied!
10
0
0

Texto

(1)

Expressões regulares

Expressão regular é um conjunto de expressões que funcionam de forma semelhante as expressões aritméticas, utilizando operadores para fazer combinações com expressões menores.

Existem dois tipos de expressões regulares:

Simples - utiliza os caracteres numéricos e os caracteres: *, ., ^, $, e [ ].

Estendidas - utiliza os caracteres numéricos e os caracteres: *, ., ?, +, ^, $, {, }, [, ], (, ), |, \< e \>.

Abaixo segue a tabela dos metacaracteres utilizados nas expressões regulares.

Metacaractere Nome Posição

^ circunflexo Indica o começo de linha $ cifrão Indica o final de linha

Texto

[abc] lista Encontra ocorrências com as letras a ou b ou c [a-z] lista Encontra ocorrências com as letras de a à z

[^abc] lista de negação Encontra ocorrências que não tenham as letras de a, b e c (abc|aeiou) ou Encontra ocorrências que tenham as letras de a, b e c ou as

vogais aeiou Quantidade

a{3} chaves Combina a letra a três vezes a{1,3} chaves Combina a letra a de 1 à 3 vezes

a{3,} chaves Combina a letra a no mínimo três vezes Quantidade

a? opcional Combina a letra a zero ou uma vez a* asterisco Combina a letra a zero ou mais vezes a+ mais Combina a letra a uma ou mais vezes

Curingas

. ponto Encontra qualquer caractere

(2)

A s e x p r e s s õ e s r e g u l a r e s s ã o u t i l i z a d a s n o s h e l l d o L i n u x a t r a v é s d o s c o m a n d o s d e filtragem grep, egrep, fgrep e sed e pelas linguagens awk, perl e etc.

Através de expressões regulares, podemos filtrar ou validar textos como: data e horário, endereço IP, endereço 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

(3)

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 ocorrências da palavra Linux. $ grep ^Linux palavras.txt

Linux

Agora, colocando o ^circunflexo, retorna apenas a primeira linha que começa com a palavra Linux. Você também pode especificar a string com o caractere dentro de aspas simples ou duplas.

(4)

$ grep "^Linux" palavras.txt

O cifrão $ Video exemplo

O caractere cifrão 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 números ou letras, por exemplo os números de 0 à 9 [0-9] e as letras de a à z [a-z], veja o exemplo abaixo:

Exemplos:

Retornam somente as palavras Linux em maiúsculo $ grep 'Linux' palavras.txt

Retornam somente as palavras linux em minúsculo $ grep 'linux' palavras.txt

Neste caso, usaremos o colchete usando a letra L maiúsculo e l minúsculo entre colchete [Ll] para retornar tanto as palavras Linux em maiúsculo e linux em minúsculo.

(5)

O ponto . Video exemplo

O caractere ponto, representa qualquer letra, ou seja, qualquer caractere em uma determinada posição, podendo ser também um número, um símbolo, um espaço, 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 começo da linha que vem seguido de uma vogal, repare que não 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" não 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 conteúdo.

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

(6)

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

linux

As chaves { } Video exemplo

Um número dentro de chaves representa a quantidade de repetições do caractere anterior.

Exemplos:

Este exemplo é semelhante ao anterior, especificando o número de caracteres e não pontos. Observe que foi usado o comando egrep e não grep, pois as chaves { } fazem parte das expressões regulares estendidas (avançadas).

$ egrep '^.{5}$' palavras.txt Linux

linux

Para usar o grep teríamos que colocar a \ barra invertida antes das chaves, por isso, é mais fácil usar o egrep nestes casos.

$ grep '^.\{5\}$' palavras.txt Linux

linux

As chaves aceitam um intervalo especificando uma faixa de repetições com um valor mínimo e máximo.

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

Linux linux liberdade alunos

Caso você não especifique o segundo número e mantenha a vírgula, ficará uma faixa infinita de caracteres.

(7)

$ egrep '^.{9,}$' palavras.txt Linus Tovalds

O criador do Linux Seja livre use Linux liberdade

Projeto Linux Brasil

Este exemplo abaixo, retorna todos os usuários que possuem o UID ou GID maior que 4 caracteres numéricos 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 asterístico) (AND) Video exemplo

O caractere .* ponto asterisco representa qualquer coisa, inclusive, nada entre partes de uma linha não importando o que há de conteúdo. O .* (AND) funciona de forma semelhante a um AND lógico em linguagens de programação, ou seja, somente exibe o resultado da pesquisa se encontrar ambas as partes da pesquisa.

Exemplos:

Neste exemplo são exibidos os usuários que começam 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

(8)

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 parênteses ( ) e funciona de forma semelhante a um OR lógico em linguagens de programação, ou seja, exibe o resultado da pesquisa se encontrar uma das partes da pesquisa.

Exemplos:

Neste exemplo são exibidos as palavras que começam com palavras Linux ou linux ou Linus. $ egrep '^(Linux|linux|Linus)' palavras.txt

Linux

Linus Tovalds linux

Os repetidores ? + *

Os caracteres interrogação (chamado de opcional), o mais e o asterisco são repetidores que especificam a quantidade e funcionam como as chaves { }.

Caractere Nome Equivale Significado

? opcional {0,1} Aparece ou não (opcional)

+ mais {1,} Aparece no mínimo uma vez

* asterisco {0,} Aparece em qualquer quantidade

Lista de negação [^] Video exemplo

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

Exemplos:

No exemplo abaixo são mostradas as linhas que não começam com vogais, repare que a palavra alunos não é exibida, pois começa com vogal.

(9)

$ 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 hífen 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 números de 0 à 9 [0123456789].

Exemplos:

No exemplo abaixo são mostradas as linhas que estão no intervalo de a à f. $ cat > letras.txt abcdefghij defabc abcdef rpzstq xwzkwmp Aperte ENTER Aperte CTRL+D

(10)

$ egrep '[a-f]' letras.txt abcdefghij

defabc abcdef

Neste exemplo abaixo, exibimos somente as linhas com as letras que não estão no intervalo de [a-f], repare que é exibida a linha com as letras de [abcdefghij], pois as letras ghij estão fora do intervalo de [a-f].

$ egrep '[^a-f]' letras.txt abcdefghij

rpzstq xwzkwmp

Neste exemplo abaixo, exibimos somente as linhas com os números que começam com 1 (102, 15 e 111) e que tenha 3 dígitos {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

Referências

Documentos relacionados

1 - Origem Geográfica das Escolas Lisboa Beja Faro Bragança Santarém Castelo Branco Coimbra Évora Leiria Portalegre Setúbal Viseu Estrangeiro... 55 e 56 – Memórias Terrenas de um

[r]

Aprova as (IR 60 – 10) Instruções Reguladoras para a Organização e o Funcionamento do Programa de Atualização dos Diplomados pela Escola de Comando e Estado-Maior do

[r]

Jorge, por culpas de solicitar mulheres, maneira canónica de dizer que as apalpava e fornicava, decerto começando na palavra do confessionário e terminando no acto recato da

[r]

2 No caso do controlo de grupo, estabeleça as ligações elétricas do controlo remoto com a unidade principal quando ligar ao sistema de operação simultânea (as ligações elétricas

As novas medidas As novas medidas estão incluídas nas mudanças econômicas anunciadas em. estão incluídas nas mudanças econômicas anunciadas em estão incluídas nas