Como Usar find, grep e awk - Tutorial de Busca de Texto no Linux

Como Usar find, grep e awk - Tutorial de Busca de Texto no Linux

Quando voce ja esta confortavel com os comandos basicos do Linux, as proximas habilidades essenciais a dominar sao find, grep e awk. Esses tres comandos sao extremamente poderosos para operacoes com arquivos no Linux, e domina-los vai melhorar drasticamente sua produtividade.

Este guia de fundamentos cobre a visao geral e o uso adequado desses tres comandos, os fundamentos de expressoes regulares que funcionam com todos eles e as poderosas capacidades de busca do comando find, tudo explicado com exemplos praticos.

O Que Voce Vai Aprender

  • Os papeis distintos de find, grep e awk e como escolher entre eles
  • Fundamentos de expressoes regulares: BRE, ERE, PCRE, ancoras e quantificadores
  • Busca com find por nome, tamanho, data e permissoes, alem de acoes
  • Pratica com cada comando atraves de exemplos praticos

Visao Geral e Selecao de Comandos

Conclusao: find localiza arquivos, grep busca conteudo, awk processa dados.

Primeiro, entenda as caracteristicas e casos de uso de cada comando. Escolher o comando certo e o primeiro passo para um trabalho eficiente.

find: Busca de Arquivos e Diretorios

  • Buscar arquivos por nome
  • Filtrar por tamanho ou data
  • Buscar por permissoes ou proprietario
  • Processamento em lote de arquivos encontrados

Especialidade: "Encontrar arquivos quando voce nao sabe onde estao".

find /home -name "*.txt" -size +1M

grep: Busca de Conteudo de Texto

  • Buscar texto dentro de arquivos
  • Busca avancada usando regex
  • Analise de arquivos de log
  • Inspecao de arquivos de configuracao

Especialidade: "Encontrar texto especifico dentro de arquivos".

grep -r "ERROR" /var/log/

awk: Processamento de Texto e Manipulacao de Dados

  • Extrair e calcular dados de colunas
  • Processar arquivos CSV
  • Agregar arquivos de log
  • Conversao de formato

Especialidade: "Processar, agregar e transformar dados".

awk '{sum+=$3} END {print sum}' sales.csv

Fluxo de Decisao

Situacao Comando a usar
Nao sabe onde os arquivos estao find
Quer encontrar texto dentro de arquivos grep
Quer processar ou agregar dados awk

Masterclass de Expressoes Regulares

Conclusao: Domine ancoras, quantificadores e classes em BRE, ERE e PCRE.

Expressoes regulares sao essenciais para desbloquear o verdadeiro poder de find, grep e awk. Domine padroes desde o basico ate os imediatamente utilizaveis em trabalho de producao.

Tipos de Expressoes Regulares

Tipo Abrv. Ferramentas Caracteristicas
Regex Basica BRE grep, sed, vi Metacaracteres precisam de escape
Regex Estendida ERE egrep, grep -E, awk Sintaxe mais intuitiva
Regex Compativel com Perl PCRE grep -P, perl Mais poderosa (lookahead/lookbehind)

Ancoras de Posicao

# Linhas comecando com ERROR
grep "^ERROR" logfile.txt

# Linhas terminando com .log
grep "\.log$" filelist.txt

# A palavra "port" (exclui "report" etc.)
grep -E "\bport\b" config.txt

Classes de Caracteres

# Enderecos IP 192.168.1.x
grep "192\.168\.1\." access.log

# Formato de hora (HH:MM)
grep "[0-9][0-9]:[0-9][0-9]" log.txt

# Linhas contendo caracteres nao alfanumericos
grep "[^a-zA-Z0-9]" data.txt

Quantificadores

# Zero ou mais (error e failed na mesma linha)
grep "error.*failed" log.txt

# Um ou mais (ERE)
grep -E "[0-9]+" data.txt

# Zero ou um (http ou https)
grep -E "https?" urls.txt

# Entre n e m ocorrencias (numeros de 2-4 digitos)
grep -E "[0-9]{2,4}" data.txt

Correspondencia Avancada de Padroes

Agrupamento e OR:

# Multiplas palavras-chave com OR
grep -E "(error|warning|critical)" log.txt

Lookahead e Lookbehind (PCRE):

# Numeros antes de "yen"
grep -P "\d+(?=yen)" price.txt

# "test" nao seguido por ".txt"
grep -P "test(?!\.txt)" filelist.txt

# Numeros apos sinal de $
grep -P "(?<=\$)\d+" invoice.txt

Padroes Praticos de Regex

Analise de Log:

# Enderecos IPv4
grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log

# Formato de data Apache
grep -E "\[[0-9]{2}/[A-Z][a-z]{2}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2} [+-][0-9]{4}\]"

# Agregacao de codigos de status HTTP
grep -E "\" [1-5][0-9]{2} " access.log | awk '{print $(NF-1)}' | sort | uniq -c

# Niveis de log
grep -E "\b(DEBUG|INFO|WARN|ERROR|FATAL|CRITICAL)\b" app.log

Validacao de Dados:

# Enderecos de e-mail (simples)
grep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"

# URLs (http/https)
grep -E "https?://[^\s\"']+" webdata.txt

Analise de Codigo:

# Definicoes de funcao (JavaScript/Python)
grep -E "^(function|def)\s+[a-zA-Z_][a-zA-Z0-9_]*\s*\(" *.js *.py

# Declaracoes de variaveis (JavaScript)
grep -E "^(var|let|const)\s+[a-zA-Z_][a-zA-Z0-9_]*" *.js

# Comentarios TODO/FIXME
grep -E "(TODO|FIXME|XXX|HACK|NOTE):" -n *.py

Depuracao de Regex

Construa regexes complexas de forma incremental.

# Passo 1: Linhas com digitos
grep "[0-9]" test.txt

# Passo 2: Um ou mais digitos
grep "[0-9]\+" test.txt

# Passo 3: Apenas digitos
grep "^[0-9]\+$" test.txt

Use -o para verificar correspondencias parciais:

echo "test123abc456" | grep -o "[0-9]\+"
123
456

Escape BRE vs ERE

  • BRE: precisa escape para + - grep "192\.168\.1\.\+"
  • ERE: sem escape necessario - grep -E "192\.168\.1\..+"

Otimizacao de Desempenho

Tres dicas para regex mais rapida

  1. Use ancoras: grep "^error" huge.log e mais rapido que grep "error" huge.log
  2. Remova .* desnecessarios: grep "error" log.txt e suficiente (.*error.* e lento)
  3. Use -F para strings fixas: grep -F "exact_string" file.txt pula o motor de regex

Comando find: Dominando a Busca de Arquivos

Conclusao: find filtra por nome, tamanho ou data, depois executa acoes nos resultados.

find e um comando poderoso que permite buscar no sistema de arquivos de qualquer forma que voce precise.

Sintaxe Basica

find [caminho_de_busca] [condicoes] [acoes]

Ele localiza arquivos que correspondem as condicoes no caminho de busca, depois executa acoes.

Busca por Nome

# Arquivos com extensao .txt
find /home -name "*.txt"

# Arquivos comecando com "config"
find . -name "config*"

# Busca .log sem diferenciar maiusculas/minusculas
find /var -iname "*.LOG"

Busca por Tipo de Arquivo

# Apenas arquivos regulares
find /home -type f

# Diretorios comecando com "log"
find /var -type d -name "log*"

# Links simbolicos
find /tmp -type l

Busca por Tamanho

# 100MB ou maior
find /var -size +100M

# Menor que 1KB
find /home -size -1k

# Entre 1GB e 10GB
find . -size +1G -size -10G

Busca por Data e Hora

# Modificado nos ultimos 7 dias (mtime)
find /home -mtime -7

# Modificado ha mais de 30 dias
find /var/log -mtime +30

# Nao acessado por mais de 1 dia (atime)
find /tmp -atime +1

# Mais recente que reference.txt
find /home -newer reference.txt

Busca por Permissao e Proprietario

# Arquivos com permissao 755
find /home -perm 755

# Arquivos com bit setuid (verificacao de seguranca)
find / -perm -4000 2>/dev/null

# Arquivos pertencentes a www-data
find /var -user www-data

# Arquivos no grupo developers
find /home -group developers

Executar Acoes

O verdadeiro poder do find e poder executar automaticamente acoes nos arquivos encontrados.

Excluir arquivos:

# Excluir arquivos temporarios em massa
find /tmp -name "*.tmp" -delete

# Excluir arquivos de log com mais de 30 dias
find /var/log -name "*.log" -mtime +30 -delete

Alterar permissoes:

# Definir arquivos PHP para 644
find /var/www -name "*.php" -exec chmod 644 {} \;

# Definir diretorios para 755
find /home -type d -exec chmod 755 {} \;

Coletar informacoes:

# Mostrar detalhes de arquivos .txt
find /home -name "*.txt" -exec ls -lh {} \;

# Mostrar tamanhos de arquivos maiores que 100MB
find /var -size +100M -exec du -h {} \;

Boas Praticas

Limite o escopo de busca

Buscar a partir do diretorio raiz (/) e lento. Especifique um diretorio inicial mais concreto.

  • Bom: find /var/log -name "*.log"
  • Ruim: find / -name "*.log"

Suprima erros de permissao

Oculte mensagens de erro de diretorios inacessiveis com 2>/dev/null.

find / -name "*.txt" 2>/dev/null

Combine condicoes de forma eficiente

Empilhe multiplas condicoes para precisao.

# Logs maiores que 1MB modificados nos ultimos 7 dias
find /home -name "*.log" -size +1M -mtime -7

Proximos Passos

Nos fundamentos, voce aprendeu como escolher entre find, grep e awk, os fundamentos de expressoes regulares e as poderosas capacidades de busca do find. O guia avancado aprofunda as tecnicas de grep e awk.