Expressões regulares Expressão regular é um
Transcrição
Expressões regulares Expressão regular é um
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] (abc|aeiou) lista de negação Encontra ocorrências que não tenham as letras de a, b e c 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 .* curinga Encontra qualquer coisa 1 As expressões regulares são utilizadas no shell do Linux através dos comandos de 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 mysql:x:110:115:MySQL Server,,,:/var/lib/mysql:/bin/false 2 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. $ grep '^Linux' palavras.txt 3 $ 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. $ grep '[Ll]inux' palavras.txt 4 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. 5 $ 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. No exemplo abaixo, serão exibidas as linhas que têm 9 ou mais caracteres. 6 $ 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 oracle:x:1003:1003::/usr/lib/oracle/xe:/bin/bash 7 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. 8 $ 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 9 $ 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 10
Documentos relacionados
O que compõem um usuário # /etc/passwd
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 back...
Leia maisCGPE/SE-MC - dgo..:::cefet-mg
faz distinção entre os caracteres maiúsculos e minúsculos. Portanto, para o Unix/Linux, Ls é diferente de ls. Quase sempre as opções dos comandos são precedidas pelo caractere “-” (menos) o...
Leia mais