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.csvFluxo 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.txtCorrespondencia 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.logValidacao 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.txtAnalise 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 *.pyDepuracao 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
- Use ancoras:
grep "^error" huge.loge mais rapido quegrep "error" huge.log - Remova
.*desnecessarios:grep "error" log.txte suficiente (.*error.*e lento) - Use
-Fpara strings fixas:grep -F "exact_string" file.txtpula 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