Guia Rápido de Processamento de Texto no Linux
Você está olhando para um arquivo de log de 2GB, procurando por chamadas de API que falharam na última hora. Ou talvez precise extrair endereços de e-mail de uma exportação CSV. Essas tarefas não deveriam exigir escrever um script Python.
Este guia rápido cobre comandos essenciais de processamento de texto no Linux—grep, awk, sed e suas contrapartes modernas—com exemplos práticos para fluxos de trabalho cotidianos de desenvolvimento frontend e full-stack.
Pontos-Chave
greperipgrepsão suas ferramentas principais para buscar texto em arquivos, com o ripgrep oferecendo ganhos de velocidade e reconhecimento de.gitignorepara bases de código grandes.sedlida com operações de busca e substituição baseadas em stream, mas fique atento às diferenças de comportamento entre as versões GNU e BSD.awkse destaca no processamento orientado a colunas para logs, CSVs e outros textos estruturados.jqpreenche a lacuna quegrepeawkdeixam ao trabalhar com dados JSON.- O operador pipe (
|) é a cola que encadeia esses comandos em pipelines poderosos e componíveis.
Comandos Principais de Busca: grep e ripgrep
grep busca padrões em arquivos e exibe as linhas correspondentes. É a base de qualquer pipeline de processamento de texto.
# Basic pattern search
grep "error" server.log
# Case-insensitive search
grep -i "warning" app.log
# Show line numbers
grep -n "TODO" src/*.js
# Invert match (lines NOT containing pattern)
grep -v "debug" output.log
# Extended regex (-E enables +, ?, |, and grouping)
grep -E "error|warning|fatal" app.log
# Count matches only
grep -c "404" access.log
ripgrep (rg) é uma alternativa mais rápida que respeita o .gitignore por padrão:
# Recursive search (default behavior)
rg "useState" ./src
# Search specific file types
rg -t js "async function"
# Show context around matches
rg -C 3 "Exception" logs/
Para bases de código grandes, o ripgrep normalmente executa de 2 a 5 vezes mais rápido que o grep e ignora arquivos irrelevantes automaticamente.
Transformação de Texto com sed
sed realiza edição de stream—operações de busca e substituição sem abrir um arquivo em um editor.
# Replace first occurrence per line
sed 's/http/https/' urls.txt
# Replace all occurrences (global flag)
sed 's/old/new/g' config.txt
# Delete lines matching pattern
sed '/^#/d' config.ini
# In-place editing (GNU sed)
sed -i 's/localhost/127.0.0.1/g' .env
# macOS/BSD requires an empty backup extension
sed -i '' 's/localhost/127.0.0.1/g' .env
Nota: O comportamento da flag
-idifere entre o GNU sed e o BSD sed. No macOS, sempre inclua uma string vazia (-i '') ou especifique uma extensão de backup (por exemplo,-i .bak).
Processamento de Colunas com awk
awk se destaca em texto estruturado—logs, CSVs e dados delimitados por espaços em branco. O POSIX awk lida com a maioria das tarefas comuns de forma portável.
# Print specific columns
awk '{print $1, $4}' access.log
# Custom field separator (CSV)
awk -F',' '{print $2}' data.csv
# Filter by condition
awk '$3 > 500 {print $1, $3}' response_times.log
# Sum a column
awk '{sum += $2} END {print sum}' sales.csv
# BEGIN/END blocks for headers
awk 'BEGIN {print "User\tCount"} {print $1, $2}' stats.txt
Comandos de Suporte Essenciais
# Sort and deduplicate (with counts, descending)
sort access.log | uniq -c | sort -rn
# Extract columns by delimiter
cut -d',' -f1,3 users.csv
# Character translation (lowercase to uppercase)
tr '[:lower:]' '[:upper:]' < input.txt
# Count lines in a file
wc -l package.json
# Find files by name pattern
find ./src -name "*.test.js" -type f
Discover how at OpenReplay.com.
Processamento de JSON com jq
Para desenvolvimento web moderno, jq lida com análise de JSON que grep e awk não conseguem gerenciar de forma limpa:
# Extract a field
jq '.data.users' response.json
# Filter array elements
jq '.items[] | select(.status == "active")' data.json
# Format API response
curl -s https://api.example.com/users | jq '.[].email'
Note que o primeiro exemplo acima evita um uso desnecessário de cat. jq pode ler arquivos diretamente, então cat response.json | jq '...' é desnecessário.
Exemplos Práticos de Pipelines
Filtrar erros de hoje dos logs:
grep "$(date +%Y-%m-%d)" app.log | grep -i error | awk '{print $4, $5}'
Extrair endereços IP únicos:
awk '{print $1}' access.log | sort -u
Encontrar os maiores arquivos em um projeto por contagem de linhas:
find . -type f -name "*.js" -exec wc -l {} + | sort -rn | head -10
Limpar dados CSV (extrair colunas, remover aspas, deduplicar):
cut -d',' -f2,4 export.csv | sed 's/"//g' | sort -u
Referência Rápida
| Tarefa | Comando |
|---|---|
| Buscar por um padrão | grep "pattern" file |
| Busca recursiva rápida | rg "pattern" |
| Substituir texto | sed 's/old/new/g' file |
| Extrair colunas | awk '{print $1}' file |
| Analisar JSON | jq '.key' file.json |
| Ordenar e deduplicar | sort -u file |
| Contar linhas | wc -l file |
Conclusão
Domine esses comandos de processamento de texto no Linux e você lidará com a maioria das tarefas de análise de logs, extração de dados e transformação de arquivos diretamente do terminal. Comece com grep para buscar, adicione awk para trabalho com colunas e recorra ao jq quando JSON estiver envolvido. O operador pipe (|) une tudo, permitindo que você componha comandos pequenos e focados em pipelines que rivalizam com scripts dedicados.
Perguntas Frequentes
Use cut quando seus dados tiverem um delimitador consistente de caractere único e você só precisar pegar campos específicos. Recorra ao awk quando precisar filtrar linhas por condição, realizar operações aritméticas ou lidar com espaços em branco irregulares. O awk trata espaços em branco consecutivos como um único delimitador por padrão, o que o torna mais tolerante com arquivos de log e saída de comandos.
Para a maioria dos fluxos de trabalho de desenvolvedores, sim. O ripgrep é mais rápido, respeita o .gitignore e usa padrões sensatos como busca recursiva. No entanto, o grep está disponível em praticamente todos os sistemas Unix por padrão, tornando-o a escolha mais segura para scripts shell portáveis. Se você está escrevendo scripts destinados a rodar em servidores ou contêineres mínimos, fique com o grep.
Sempre teste seu comando sed sem a flag -i primeiro para visualizar a saída no seu terminal. Quando estiver pronto para editar in-place, use uma extensão de backup como sed -i .bak em sistemas GNU. No macOS ou BSD, a sintaxe é sed -i .bak. Isso cria uma cópia do arquivo original antes de aplicar as mudanças, dando a você uma opção de rollback.
Sim. O jq foi construído para navegar estruturas profundamente aninhadas. Use notação de ponto para percorrer objetos, notação de colchetes para arrays e expressões pipe para encadear filtros. Por exemplo, jq '.data.users[] | select(.active == true) | .email' entra em um array aninhado, filtra por uma condição e extrai um campo, tudo em um único comando.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.