Published on

Filtros de Conteúdo no Linux, grep e egrep

Authors
  • avatar
    Name
    Rodrigo Peixoto
    Twitter

🔍 Filtros de Conteúdo no Linux: grep, egrep e Suas Possibilidades

Os comandos grep e egrep são ferramentas poderosas de filtro de conteúdo, muito utilizados em análise de logs, buscas em arquivos, e automação de tarefas.


📌 1. grep – Global Regular Expression Print

🔧 Sintaxe Básica:

grep [opções] 'padrão' arquivo

✅ Exemplos:

grep "erro" log.txt         # Busca linhas que contenham a palavra "erro"
grep -i "erro" log.txt      # Busca sem diferenciar maiúsculas e minúsculas
grep -n "erro" log.txt      # Mostra o número da linha
grep -r "falha" /var/log    # Busca recursiva em diretórios

🔍 Principais Opções:

OpçãoDescrição
-iIgnora letras maiúsculas/minúsculas (case insensitive)
-vInverte o filtro: mostra linhas que não combinam com o padrão
-nMostra o número da linha
-r ou -RBusca recursiva em diretórios
-lMostra apenas os nomes dos arquivos que contêm o padrão
-cConta o número de linhas que correspondem ao padrão
-oMostra somente o trecho da linha que corresponde
--color=autoRealça o padrão encontrado com cor

⚙️ 2. egrep – Extended grep (grep com expressões regulares estendidas)

⚠️ O egrep é equivalente a grep -E. Ele aceita expressões regulares estendidas (ERE), como +, ?, |, () **sem necessidade de escape com **.

🔧 Sintaxe:

egrep 'padrão' arquivo
grep -E 'padrão' arquivo  # Equivalente

✅ Exemplos:

egrep 'erro|falha' log.txt         # Busca linhas com "erro" OU "falha"
egrep 'usuario[0-9]+' usuarios.txt # Nomes como usuario1, usuario23 etc.
egrep '(sucesso|ok).*finalizado' log.txt  # Combinação com agrupamento

🔣 3. Expressões Regulares Comuns

PadrãoSignificado
.Qualquer caractere
*Zero ou mais ocorrências do anterior
+Uma ou mais ocorrências do anterior (em egrep)
?Zero ou uma ocorrência (em egrep)
[]Intervalo de caracteres ([a-z], [0-9])
^Início da linha
$Final da linha
``
()Agrupamento (em egrep)

🧠 Exemplos Práticos Avançados

# Mostrar todas as linhas que começam com "Erro"
grep '^Erro' log.txt

# Mostrar todas as linhas que terminam com ponto final
grep '\.$' log.txt

# Buscar CPF (formato 000.000.000-00)
egrep '[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]{2}' arquivo.txt

# Buscar e-mails
egrep '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}' emails.txt

# Exibir linhas que NÃO contenham a palavra "OK"
grep -v "OK" status.txt

🔄 grep + outros comandos

Você pode usar grep com pipes (|) para filtrar saídas de outros comandos:

ps aux | grep apache      # Processos com apache
dmesg | grep -i usb       # Mensagens do kernel sobre USB
ls -l | grep '^d'         # Apenas diretórios

🧰 Dica Extra: grep em tempo real

Use com tail -f para monitoramento de logs:

tail -f /var/log/syslog | grep "fail"

🔄 grep vs egrep

Recursogrepegrep (grep -E)
Regex padrãoBRE (Basic Regex)ERE (Extended Regex)
`, +, ()` suportadoCom \ (escape)
DescontinuadoNãoSim, egrep pode ser obsoleto
RecomendadoSim, com -EUse grep -E

🧪 Teste rápido (sem criar arquivo)

echo -e "erro\nok\nfalha" | grep 'erro'   # Filtra "erro"
echo -e "erro\nok\nfalha" | egrep 'erro|falha'  # "erro" ou "falha"