PROCURAR:     
  Terça, 24/11/2009
» Introdução
» Programação
» Administração
» Hardware
» Aplicativos
» Jogos
» Segurança
» Editorial
» Entrevistas
» Fórum
» Links
» Notícias
» Pegue o Linux
» Documentação
» Programas
» Dúvidas
» Oportunidades
» Sobre
» Contato
» Publicidade
 
Powered By:
DEBIAN
GNU/LINUX
 
English Version
 
 
Curso de Shell - Aula V
Por: Alex Borro

Avançando para expressões regulares

Os coringas são o começo, mas a idéia vai mais longe. Por exemplo, suponha que queremos uma expressão que case com Frederic Smith ou Fred Smith, ou seja, a string "eric" é opcional.

Primeiro, introduzimos o conceito de um "caracter escapado (escaped character)".

"Um caracter escapado é um caracter precedido por uma barra invertida ( \ ). Essa barra invertida faz o seguinte: (a) Remove qualquer significado especial do caracter. (b) acrescenta um significado especial a um caracter que não tenha um significado especial."

Parece complicado, mas veja nos exemplo que é um tanto quanto simples:

Para procurar uma linha contento o texto "hello.gif", o comando correto seria:

    grep 'hello\.gif' file

Desde que "grep 'hello.gif' file" iria resultar linhas contendo: hello-gif , hello1gif , helloagif , etc.

Ou seja, a barra invertida remove o significado especial do ".", passando esse a significar um simples ponto ao invés de um coringa.

Agora vamos passar para expressões agrupadas, a fim de encontrar um jeito de criar uma expressão que case com Frederic ou Fred. Primeiro vamos começar com o operador "?":

"Uma expressão consistindo de caracter seguido por uma interrogação escapada ( \? ) casa com zero ou uma instância daquele caracter".

Exemplo:

"bugg\?y" casa com o seguinte: bugy , buggy  mas não com
bugggy

neo@matrix:~$ echo bugy | grep "bugg\?y"
bugy
neo@matrix:~$ echo bugggy | grep "bugg\?y"
neo@matrix:~$ 

Agora vamos para expressões agrupadas. No nosso exemplo, queremos tornar opcional a string "eric" após "Fred", ou seja, não apenas um caracter mas sim um conjunto de caracteres (string).

"Uma expressão dentro de parênteses escapados é tratada como um único caracter"

Exemplos:

"Fred\(eric\)\?" Smith casa com "Fred Smith" or "Frederic Smith"
\(abc\)* casa com abc , abcabcabc, etc (isto é, qualquer
número de repetições da string "abc", incluindo
zero).

Note que temos que tomar cuidado quando nossas expressões contém espaços em branco. Quando eles aparecem, precisamos colocar a expressão entre aspas, para que o shell não interprete mal nosso comando. Para o exemplo acima:

grep "Fred\(eric\)\? Smith" file

Eu aconselho fortemente a sempre usar aspas, mesmo que não usemos espaços em brancos. Já tive muita dor de cabeça porque expressões e comandos não funcionavam simplesmente por não estarem entre aspas. Um dos exemplo acima (o do bugg\?y) não funciona no meu sistema se não estiver entre aspas. Veja:

neo@matrix:~$ echo bugy | grep "bugg\?y"
bugy
neo@matrix:~$ echo bugy | grep bugg\?y
neo@matrix:~$ 

«Anterior Próximo»

O que ele faz?
Usando caracteres coringas
Avançando para expressões regulares
Outros operadores úteis
Casando com um número especifico de repetições
Usando backreference (referencia anterior)
Alguns detalhes cruciais: caracteres especiais e aspas
Sintaxe das expressões regulares estendidas


Enviar para um amigo

Imprimir

Índice de artigos

ENQUETE
Quais são as suas expectativas quanto ao OpenSUSE 11.2?

Que ele venha mais rápido
Seja mais leve
Mais bonito
Outros


NEWSLETTER
Inscreva-se e receba as últimas notícias, programas, artigos, novidades e tudo do mundo Linux que aconteceu na semana.
 
Digite seu email:

Publicidade / Sobre OLinux / Entre em Contato / Privacidade
Copyright (c) 1999-2009, OLinux - O Portal de Linux do Brasil.
Desenvolvido por: Linux Solutions
Todos os Direitos Reservados.