Nesta aula teremos um breve tutorial sobre o Grep. Ele
não é somente um dos comandos mais úteis, mas
o seu domínio abre portas para dominar outros poderosos
comandos, como o sed (que trataremos na próxima aula) ,
awk, perl, etc.
Eu fiz uma adaptação/ modificação de
um tutorial que eu tenho, e por sinal é excelente, sobre
o Grep e Expressões Regulares em inglês. Espero que
tenha ficado legal e vocês gostem.
O que ele faz?
O grep basicamente faz buscas. Mais precisamente:
grep palavra file retorna todas as linhas do arquivo file
que contenham palavra
Outro jeito de usar o grep é atraves de pipe (lembram
dos pipes?). Por exemplo:
ls | grep palavra
Lista todos os arquivos que contenham palavra em seu nome.
Ou seja, a entrada do grep é uma lista de arquivos
(gerada pelo ls) que será filtrada, sendo impressas
somente as linhas que contenham palavra.
Usando caracteres coringas
Suponho que todos saibam o que são caracteres
coringas. Caso contrário, coringas são caracteres
especiais que substituem outros. Geralmente o caracter "*"
é um coringa que significa "qualquer caracter em
qualquer quantidade". Por isso se a gente executar "ls *",
onde "*" entra no lugar do "nome do arquivo", significando
qualquer string de qualquer tamanho. Por isso ele lista todos
os arquivos.
Mas agora voltemos ao grep. Será que ele aceita
coringas ??? A resposta é mais do que sim. O grep
suporta algo que vai além de coringas, ele suporta
Expressões Regulares. Mas vamos começar apenas com
coringas. Um dos mais usados com o grep é o "." Vamos a
um exemplo:
>cat file >grep b.g
file
big big
bad bug bad bug
bigger bigger
boogy
Note que boogy não casa, desde que "." significa
"qualquer e apenas um caracter". Para significar strings
arbitrárias utilizamos "*", que funciona da seguinte
maneira:
"A expressão consistindo de um caracter seguido por
um * casa com qualquer número (inclusive zero) de
repetições desse caracter. Em particular, ".*"
significa qualquer string."
Para compreendermos vamos a mais exemplos:
>cat file
big
bad bug
bag
bigger
boogy>grep b.*g file
big
bad bug
bag
bigger
boogy>grep b.*g. File
bigger
boogy>grep ggg* file
bigger