Neste artigo darei uma introdução aos comandos grep e egrep. Para iniciantes em Linux, este artigo os ensinará a realizar buscas em arquivos e diretórios.
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 é através de pipe. 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.
O grep é bastante amplo suportando também curingas como o ponto ., *, etc e até mesmo expressões regulares.
Buscas usando meta representantes
Como dito acima, podemos realizar buscas por arquivos, e buscas em arquivos usando expressões regulares. Então agora vamos fazer alguns testes usando o meta ponto.
Imagine que você queira localizar um arquivo chamado teste.txt, para isso podemos usar uma das seguintes opções, claro que para localizar arquivos devemos combinar o comando grep com o ls, entao usamos da seguinte forma:
ls | grep te
Procura por todos os arquivos cujo nome case com a ER te.
Ex.: sistemas.doc; teste.txt; te.txt; te
ls | grep -E test.\.txt
Procura por todos os arquivos cujo nome case com a ER test.\.txt
Procurar por todas as linhas que possuem uma palavra que case com a ER sonh[^i]
Ex.: hj tive um sonho; vai sonhando
Buscas usando meta quantificadores
O uso de quantificadores é bem comum principalmente quando você deseja procurar por algo que possua vários caracteres iguais repetidos.
ls | grep -E testee\?.txt
Procura por arquivos cujo nome casem com a ER testee\?.txt
Ex.: testee.txt; abcteste.txt; teste.txtd4
grep -E ^o*i teste.txt
Procura por linhas que comecem ou não com a letra o seguida ou não de vários o e um i no arquivo teste.txt.
Ex.: oooooooooooooi; oi; oooi;
grep -E ^o+i teste.txt
Procura por linhas que comecem com a letra o seguida ou não de vários o e um i no arquivo teste.txt
Ex.: oooooooooooooi; oi; oooi
grep -E '^o\{0,20\}i' teste.txt
Procura por linhas que tenham no minimo 0 o e no máximo 20 seguida de um i no arquivo teste.txt
Ex.: ooooooooooooi; oi; ooi;
Buscas usando meta âncoras
Podemos usar também os metas do tipo âncoras para realizar consultas no grep. Muito útil quando você sabe o incio ou o final de uma linha ou arquivo.
ls | grep -E '\bteste\.txt'
Procura por arquivos cuja borda esquerda seja teste.txt
Ex.: teste.txt; teste.txtd4
ls | grep -E 'teste\.txt\b'
Procura por arquivos cuja borda esquerda seja teste.txt
Ex.: teste.txt; abcteste.txt
grep -E '\bOla' teste.txt
Procura por linhas cuja borda esquerda seja Ola
Ex.: Ola meu nome é josé
grep -E 'teste\.txt$'
Procura por linhas do arquivos cujo final da linha seja teste.txt
Ex.: eu escrevi o teste.txt
ls | grep -E ^teste.txt
Procura por arquivos cujo nome comecem com a substring teste.txt
Ex.: teste.txt; teste.txtsasushfk
grep -E ^A.* teste.txt
Procurar dentro do arquivo teste.txt todas as linhas que comecem com A.
Ex.: A fêmea do cachorro é a cadela.
Buscas usando meta do tipo outros
Suponhamos que desejamos realizar buscas em um texto ou pasta cujo nome seja oi ou alo.
Podemos fazer essa busca usando os representantes, porém como temos conhecimento dos metas da classe ¿outros¿ poderíamos usar o ¿ oi|alo ¿, ¿(oi)|(alo)¿.
Caso queira casar um caractere, mas o mesmo é um meta podemos utilizar o ¿ \ ¿.
Podemos também utilizar o retrovisor.
ls | grep -E 'liro\1'
Procura por nomes que tenham liroliro em qualquer lugar do nome.
Liroliro.txt; casa_liroliro.dwg;
ls | grep -E '(oi)|(alo)'
Procura por nomes que tenham oi ou alo em qualquer lugar do nome.
oi.txt; alo.txt
ls | grep -E '(tico)\1'
Procura por nomes que tenham ticotico em qualquer lugar do nome.
[3] Comentário enviado por julio_hoffimann em 29/04/2011 - 20:54h
Oi Weslley, parabéns!
Expressões regulares são muito poderosas, poupam um trabalho enorme se bem aplicadas.
Para quem está pensando em usar o egrep, prefiram usar o grep -E, é a mesma coisa, mas o primeiro é obsoleto e só é mantido por compatibilidade com programas antigos. Mais informações: man egrep