• 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

[r]

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

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]

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

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

[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