Back

Guia Rápido de Processamento de Texto no Linux

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

  • grep e ripgrep são suas ferramentas principais para buscar texto em arquivos, com o ripgrep oferecendo ganhos de velocidade e reconhecimento de .gitignore para bases de código grandes.
  • sed lida 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.
  • awk se destaca no processamento orientado a colunas para logs, CSVs e outros textos estruturados.
  • jq preenche a lacuna que grep e awk deixam 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 -i difere 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

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

TarefaComando
Buscar por um padrãogrep "pattern" file
Busca recursiva rápidarg "pattern"
Substituir textosed 's/old/new/g' file
Extrair colunasawk '{print $1}' file
Analisar JSONjq '.key' file.json
Ordenar e deduplicarsort -u file
Contar linhaswc -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.

OpenReplay