// // // PHPH.com.br - Linux: procurando com o comando grep
All for Joomla All for Webmasters

Linux: procurando com o comando grep

O grep é um software livre (código-fonte aberto e gratuito) da suíte de aplicativos da Free Software Fundation (FSF) destinado à busca de padrões (expressões regulares comuns, extendidas e estilo Perl) ou textos simples no conteúdo de arquivos ou da entrada padrão (stdin), como a maioria dos aplicativos não-gráficos da FSF. Todas as distribuições Linux e o sistema operacional FreeBSD o incluem por padrão.

Este artigo lhe fornecerá apenas uma orientação básica. Caso deseje se tornar um especialista, consulte os seguintes livros: Practical Guide to Linux Commands, Editors, and Shell Programming, Linux Command Line and Shell Scripting Bible e Mastering Regular Expressions.

Apesar da localização de termos com o aplicativo grep ser bastante simples, alguns de seus recursos são desconhecidos pelos usuários. Neste artigo, relembraremos alguns aspectos importantes na utilização do grep em um ambiente Linux Ubuntu 8 -  Intrepid Ibex no modo gráfico (gnome). O arquivo texto utilizado possui o seguinte conteúdo:

Executando buscas com o comando grep

Conforme a documentação oficial do grep, a sua utilização para busca em arquivos é dada pelo seguinte comando:

grep [OPÇÕES] PADRÃO [ARQUIVO...]

Como o grep também pode efetuar o processamento de texto proveniente da entrada padrão (stdin), o comando acima é equivalente a: cat ARQUIVO | grep PADRÃO.

O grep possui várias opções (consulte o man grep). Dentre as mais relevantes:

Ignorar a distinção entre letras maiúsculas e minúsculas: "grep -i"

Retonar apenas a quantidade de ocorrências encontradas: "grep -c"

Destacar expressões com cor: "grep --color"

Retornar o nome dos arquivos analisados que possuem a expressão especificada: "grep -l"

Limitar a quantidade de expressões encontradas em um único arquivo: "grep -m NUM"

Retonar os números das linhas (posição em relação ao arquivo): "grep -n"

Executar a busca em todas as pastas recursivamente: "grep -R"

Os comandos egrep, fgrep e rgrep são atalhos para os seguintes comandos, respectivamente: grep -E, grep -F e grep -r.

Expressões regulares

As expressões regulares (também conhecidas por regex) determinam um conjunto de regras de sintaxe de um importante sistema de processamento de texto. Enquanto o grep utiliza essa técnica apenas para a busca de determinado texto, os aplicativos sed e awk também podem efetuar o processamento do texto.

Essas regras podem se tornar muito complexas e até mesmo ininteligíveis em determinadas aplicações; portanto, apenas  a sua utilização com o intuito de localizar determinados padrões serão abordados (a teoria completa demandaria várias horas de estudo).

O primeiro passo para se utilizar expressões regulares é ter conhecimento da tabela de meta-caracteres (caracteres especiais):

Caractere Descrição
Posicionamento
^ Início de uma linha
$ Fim de uma linha
\< Início de uma palavra
\> Fim de uma palavra
Caracteres únicos
. Caractere qualquer único (apenas um caractere)
[...] Qualquer caractere único (apenas um caractere) incluso entre os colchetes
[^...] Qualquer caractere único (apenas um caractere) que não esteja entre os colchetes
\ Caractere de escape
Quantidade
* Qualquer quantidade (inclusive, zero) de ocorrências da expressão regular ou caractere precedente
.* Qualquer quantidade (inclusive, zero) de ocorrências da expressão regular ou caractere precedente
+ Uma ou mais ocorrências da expressão regular ou caractere precedente
{N} N ocorrências da expressão regularprecedente

Baseando-se nessa tabela, podemos encontrar as expressões "iminente" ou "eminente" através do padrão '.minente', pois o ponto combinará com 1 caractere qualquer com o comando grep  '.minente' arquivo.txt:

Entretanto, o comando acima também encontrará expressões como "wminente" ou "aminente". Para filtrar ainda mais o resultado da pesquisa, teríamos de usar uma expressão regular que combinasse apenas com as vogais "i" e "e" como o comando grep '[ie]minente' arquivo.txt:

Para encontrarmos ambas as palavras desprezando-se a caixa (letras maiúsculas ou minúsculas), devemos utilizar a opção -i (ignore case). Por exemplo, o comando grep -i '[ie]minente' arquivo.txt encontraria as palavras iminente, Iminente, Eminente ou eminente.

E caso quiséssemos encontrá-las apenas no início de uma linha, grep -i '^[ie]minente' arquivo.txt:

Ou no final de uma linha, com o comando grep -i '[ie]minente$' arquivo.txt

A aprendizagem de expressões regulares demanda muito treinamento. Experimente outros padrões em arquivos de texto cujo conteúdo já seja do seu conhecimento.

Itens relacionados (por tag)

Deixe um comentário

Certifique-se de preencher os campos indicados com (*). Não é permitido código HTML.