Guia Completo do Comando grep no Ubuntu

Visão Geral

Ao analisar grandes arquivos de texto ou logs do sistema no ambiente Linux, o comando grep é uma ferramenta essencial. Neste artigo, exploraremos técnicas práticas fundamentais para executar o grep no terminal do Ubuntu, localizar rapidamente as strings desejadas e interpretar com precisão os resultados exibidos.

Busca Básica de Strings e a Opção para Ignorar Maiúsculas e Minúsculas (-i)

Para criar e acessar um espaço de trabalho dedicado para a prática do comando grep, execute o comando mkdir -p ~/grep_demo && cd ~/grep_demo.

mkdir -p ~/grep_demo && cd ~/grep_demo

Para criar um arquivo de texto de exemplo contendo strings para o teste de busca, execute o comando echo -e 'Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux' > sample.txt.

echo -e ‘Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux’ > sample.txt

O comando grep busca padrões ou strings específicas em arquivos ou textos e exibe as linhas correspondentes.
Por padrão, ele diferencia estritamente letras maiúsculas de minúsculas (case-sensitive), exibindo apenas as linhas onde Ubuntu corresponde de forma exata.
⚙️ [Principais Opções]

-i : Ignora a diferença entre maiúsculas e minúsculas e busca o padrão correspondente.
-v : Inverte a busca, exibindo apenas as linhas que não coincidem com o padrão especificado.
-n : Exibe o número da linha juntamente com o conteúdo correspondente.
-c : Conta e exibe apenas a quantidade total de linhas correspondentes.
-r : Percorre recursivamente todos os arquivos dentro dos subdiretórios.
-l : Lista apenas os nomes dos arquivos que contêm o conteúdo correspondente.
-E : Realiza a busca utilizando Expressões Regulares Estendidas (ERE).

grep ‘Ubuntu’ sample.txt

Ao adicionar a opção -i, a busca passa a ignorar maiúsculas e minúsculas.
Dessa forma, tanto as linhas que contêm Ubuntu com inicial maiúscula quanto ubuntu em minúsculas serão exibidas.

grep -i ‘ubuntu’ sample.txt

Exibição do Número da Linha (-n) e Inversão de Correspondência (-v)

Para gerar dados de log simulados para a prática de análise de logs, execute o comando echo -e 'INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full' > app.log.

echo -e ‘INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full’ > app.log

Ao utilizar a opção -n, o número da linha correspondente ao padrão de busca é exibido.
O número da linha e o conteúdo com a string ERROR são exibidos juntos, permitindo identificar rapidamente o local onde ocorreu o problema.

grep -n ‘ERROR’ app.log

A opção -v inverte o resultado, exibindo apenas as linhas que não coincidem com o padrão especificado.
Isso permite filtrar e verificar apenas as linhas de erro, excluindo os registros INFO que indicam o funcionamento normal.

grep -v ‘INFO’ app.log

Busca Recursiva em Subdiretórios (-r) e Exibição Apenas do Nome dos Arquivos (-l)

Para praticar a busca recursiva, execute o comando mkdir -p ~/grep_demo/logs/archive para criar uma estrutura de subdiretórios de arquivamento.

mkdir -p ~/grep_demo/logs/archive

Para criar um arquivo de log de erro de banco de dados para o teste de busca, execute o comando echo 'database error' > ~/grep_demo/logs/db.log.

echo ‘database error’ > ~/grep_demo/logs/db.log

Para criar um arquivo de log de cache que represente logs normais, execute o comando echo 'cache hit' > ~/grep_demo/logs/cache.log.

echo ‘cache hit’ > ~/grep_demo/logs/cache.log

Para testar a busca em subdiretórios com logs antigos, execute o comando echo 'fatal error occurred' > ~/grep_demo/logs/archive/old.log.

echo ‘fatal error occurred’ > ~/grep_demo/logs/archive/old.log

Usando as opções -r e -n juntas, a busca é realizada recursivamente nos subdiretórios enquanto exibe o número de cada linha correspondente.
O caminho do arquivo, o número da linha e o conteúdo que contêm a string error são exibidos tanto para o diretório logs quanto para o subdiretório archive.

grep -rn ’error’ ~/grep_demo/logs

Ao adicionar a opção -l, executando como -rl, apenas a lista de caminhos dos arquivos que contêm o padrão é exibida, em vez do conteúdo das linhas.
Isso é muito útil para filtrar e identificar rapidamente apenas os arquivos onde ocorreram erros entre inúmeros arquivos de log.

grep -rl ’error’ ~/grep_demo/logs

Visualização do Contexto ao Redor do Resultado (-A, -B, -C) e Destaque Colorido

Para praticar o acompanhamento do progresso das etapas de um processo e o contexto de um erro, crie um arquivo de log de exemplo executando echo -e 'Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit' > process.log.

echo -e ‘Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit’ > process.log

Ao utilizar as opções -B e -A, você pode exibir um número específico de linhas anteriores (Before) e posteriores (After) em relação à linha correspondente.
Com a opção --color=always, o termo correspondente Critical Failure é destacado em cores, enquanto você visualiza 1 linha anterior e 2 linhas posteriores, compreendendo o fluxo de trabalho antes e depois da ocorrência da falha.

grep –color=always -B 1 -A 2 ‘Critical Failure’ process.log

A opção -C exibe simultaneamente o mesmo número de linhas em ambas as direções (Contexto) ao redor da linha encontrada.
A linha imediatamente anterior e a linha imediatamente posterior à linha que contém Critical Failure são exibidas ao mesmo tempo, permitindo verificar o contexto essencial de forma ainda mais concisa.

grep –color=always -C 1 ‘Critical Failure’ process.log

Até aqui, abordamos os pontos essenciais do comando grep no Ubuntu, desde as opções básicas de busca até sua aplicação prática na análise de logs.
Aproveite para aplicar ativamente no terminal os padrões aprendidos hoje e eleve a eficiência do seu fluxo de trabalho.