PROCURAR:     
  Sábado, 07/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

Outros operadores úteis

Para casar algum caracter de uma lista, use [ ] Veja:

     "[Hh]ello" casa com linhas contendo "hello" ou "Hello" 

Faixas de caracteres também são permitidos:

     [0-3] é o mesmo que [0123] 
     [a-k] é o mesmo que [abcdefghijk]
     [A-C] é o mesmo que [ABC]
     [A-Ca-k] é o mesmo que [ABCabcdefghijk]

Existem também algumas formas alternativas:

     [[:alpha:]] é o mesmo que [a-zA-Z]
     [[:upper:]] é o mesmo que [A-Z]
     [[:lower:]] é o mesmo que [a-z]
     [[:digit:]] é o mesmo que [0-9]
     [[:alnum:]] é o mesmo que [0-9a-zA-Z]
     [[:space:]] casa com qualquer quantidade de espaços,
inclusive tabulações

Essas formas alternativas, como [[:digit:]] é preferível ao método direto, [0-9].

Os [ ] podem ser usado para indicar caracteres que NÃO devem estar na expressão. É só colocar o sinal ^ na primeira posição da lista. Veja:

neo@matrix:~$ echo hello | grep "[Hh]ello"
hello
neo@matrix:~$ echo hello | grep "[^Hh]ello"
neo@matrix

Outro exemplo, um pouco mais complicado:

grep "([^()]*)a" file retorna qualquer linha contendo um par de parentes seguido por "a" e que NÃO contenham outros parênteses dentro. Assim, ele casa com essas linhas:

(hello)a
(aksjdhaksj d ka)a

Mas não com: x=(y+2(x+1))a

Casando com um número especifico de repetições

Suponha que você queira casar um número específico de repetições de uma expressão. Um bom exemplo são números de telefones. Você pode procurar por um número de telefone com sete dígitos, assim:

grep "[:digit:]\{3\}[ -]\?[:digit:]\{4\}" file 

Ou seja, três dígitos, opcionalmente um espaço ou um hífen e mais 4 dígitos.

Procurando por começo e fim de linha:

Isso é muito interessante. Digamos que você queira procurar por linhas que contendo espaços em brancos no começo da linha, a palavra hello e então o fim da linha. Vamos começar com este exempo:

     >cat file
             hello
     hello world
             hhello

     >grep hello file
             hello
     hello world
             hhello

Isso não é o que nós queremos. O que está errado ? O problema é que o grep procura por linhas contendo a string hello e todas as linhas especificadas contem ela. Para contornar isso, introduzimos os caracteres de começo e fim de linha:

"O caracter ^ significa começo de linha e o $ significa fim da linha"

Retornando ao nosso exemplo:

grep "^[[:space:]]*hello[[:space:]]*$" file

Ou seja, o começo da linha, qualquer quantidade de espaço em branco (inclusive zero), a palavra hello, qualquer quantidade de espaço em branco e o fim da linha. Essa expressão faz o que a gente quer, retornando somente a linha que contém a palavra hello. Outro exemplo:

grep "^From.*Alex" /var/spool/mail/neo

Procura no meu inbox por mensagens de uma pessoa em particular (no caso, Alex). Esse tipo de expressão regular é extremamente útil e filtros de e-mail, como o procmail, utilizam isso para fazerem tudo.

Isso ou Aquilo: Procurando uma coisa OU outra:

"A expressão consistindo de duas expressões separadas pelo operador OU \| casa linhas contendo uma das duas expressões"

Note que você DEVE colocar a expressão dentro de aspas simples ou duplas:

grep "cat\|dog" file casa com linhas contendo a palavra "cat" ou a
palavra "dog" 
grep "I am a \(cat\|dog\)" casa com linhas contendo a string "I am
a cat" ou a string "I am a dog". 

«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
O que você achou do Ubuntu 9.10?

Excepcional
Muito bom
Razoável
Mesma coisa
Não gostei


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.