Usando grep e egrep

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.

[ Hits: 213.075 ]

Por: Weslley Wellington em 29/04/2011


grep



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

Ex.: teste.txt; testa.txt; testo.txt; absteste.txt

grep -E sonh. Teste.txt

Procurar por todas as linhas que possuem uma palavra que case com a ER sonh.

Ex.: hj tive um sonho; vai sonhando

ls | grep -E test[aeo]\.txt

Procura por todos os arquivos cujo nome case com a ER test[aeo]\.txt

Ex.: teste.txt; testa.txt; testo.txt; absteste.txt

grep -E sonh[ao] Teste.txt

Procurar por todas as linhas que possuem uma palavra que case com a ER sonh[ao].

Ex.: hj tive um sonho; vai sonhando

ls | grep -E test[^i]\.txt

Procura por todos os arquivos cujo nome case com a ER test[^i]\.txt

Ex.: teste.txt; testa.txt; testn.txt; testb.txt; testo.txt; absteste.txt

grep -E sonh[^i] Teste.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.

Ticotico.txt;

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. grep
   3. egrep
   4. Conclusão
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Conversão de códigos e sistemas numéricos

Instalando o Slackware em português

Gerenciamento de Discos com o Shell

Bodhi Linux 6.0

Compilando Apache 2 com PHP, MySQL, mod_perl e mod_ssl

  
Comentários
[1] Comentário enviado por xerxeslins em 29/04/2011 - 14:00h

Legal! Bem didático. Era uma das coisas que eu queria saber um pouco. Valeu!

[2] Comentário enviado por foxbit3r em 29/04/2011 - 20:01h

Muito legal, parabéns!

[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

Abraço!

[4] Comentário enviado por iz@bel em 29/04/2011 - 22:25h

Olha, isso era algo que eu realmente preciso aprender, gostei!
Vou ler depois com mais atenção!
Favoritei :D

[5] Comentário enviado por chimico em 30/04/2011 - 20:54h

Parabéns amigo, viva a linha de comando!

[6] Comentário enviado por matheusgf1539 em 11/03/2017 - 08:21h

muito bom


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts