Editor de Fluxo sed: Guia Operacional para Manipulação de Texto no Linux

Mecanismo Interno e Funcionamento Básico

O utilitário sed (Stream Editor) é uma ferramenta nativa do ambiente Unix/Linux projetada para aplicar transformações em fluxos de texto de forma não interativa. Seu funcionamento baseia-se na leitura sequencial linha por linha. Cada registro é analisado contra expressões ou índices definidos pelo operador; ao encontrar correspondência, o motor executa as instruções programadas. Caso não haja match, a linha é encaminhada à saída padrão intacta. Por padrão, o sed opera em modo de visualização, preservando o arquivo fonte original até que a flag de gravação seja explícita.

Sintaxe e Opções de Controle

A execução segue o modelo sed [opções] 'instrução' [arquivo]. Os parâmetros mais utilizados incluem:

  • -i: Habilita edição in-place, sobrescrevendo o arquivo original com o resultado processado.
  • -n: Suprime a impressão automática de todas as linhas. Combinado com o comando p, permite renderização seletiva.
  • -e: Encadeia múltiplos scripts de edição dentro de uma única invocação.
  • -f: Carrega os comandos a partir de um arquivo de texto externo, facilitando a manutenção de lógicas extensas.
  • -r: Ativa expressões regulares estendidas (ERE), dispensando escapes manuais em quantificadores e grupos.

Ações Fundamentais e Casos de Uso

Filtragem e Impressão (p)

O comando de impressão é amplamente utilizado em conjunto com -n para extrair fatias específicas do documento sem poluir a saída.

# Retorna exclusivamente a décima primeira linha
sed -n '11p' app.log

# Renderiza o intervalo compreendido entre as linhas 5 e 18
sed -n '5,18p' config.json

# Seleciona apenas as linhas que fogem ao intervalo 2–9
sed -n '2,9!p' dataset.csv

# Imprime a linha alvo seguida das duas subsequentes
sed -n '3,+2p' sistema.log

# Extrai registros em passos fixos (inicio ~ passo)
sed -n '1~4p' tabela.txt

Substituição Parcial e Global (s)

Ideal para buscas localizadas e trocas diretas. A sintaxe adota delimitadores flexíveis (s/old/new/flags).

# Altera todas as menções de "temp_dir" para "cache_loc" em todo o escopo
sed 's/temp_dir/cache_loc/g' setup.yaml

# Modifica apenas o bloco entre as linhas 4 e 12, trocando protocolo HTTP por HTTPS
sed '4,12s|http://|https://|g' endpoints.txt

# Reposiciona o primeiro caractere de cada linha com um asterisco
sed '1,6s/^./\*/' menu.txt

# Limpa números de telefone formatados, mantendo apenas dígitos
sed 's/[()[\- ]//g' contatos.dat

Inserção e Acréscimo (i e a)

Difere onde o texto será inserido: i antecede a linha alvo, enquanto a sucede.

# Acrescenta um rodapé personalizado ao final do arquivo
sed -i '$ a # Gerado via pipeline automático' relatório.pdf

# Insere um comentário explicativo imediatamente antes da linha contendo "timeout"
sed '/timeout/i -- Valor ajustado para evitar falhas de rede' firewall.rules

# Anexa blocos multi-linha após o segmento demarcado entre as linhas 7 e 10
sed '7,10a \
-- Nova regra aplicada \
-- Autor: equipe.ops' políticas.net

Reescrita Completa de Linha (c)

Quando necessário substituir integralmente uma ocorrência por um conteúdo distinto, independentemente do que já existia naquela posição.

# Substitui totalmente o conteúdo da linha 22
sed '22c Versão 2.0 liberada com estabilidade aprimorada' changelog.md

# Localiza qualquer registro vazio de sessão e o redefine
sed '/^SESSION_ID=/c SESSION_ID=RESTART_REQUIRED' sessao_cache.conf

Eliminação de Registros (d)

Remove linhas do fluxo de processamento conforme índices ou padrões.

# Descarta linhas em branco e comentários isolados
sed -r '/^[[:space:]]*$/d;/^[[:space:]]*#/d' parser.in

# Exclui trechos delimitados por marcas de início e fim (inclusive os delimitadores)
sed '/### INICIO ###/,/### FIM ###/d' backup.sql

# Filtra entradas duplicadas mantendo apenas instâncias únicas
sed '/DUP_KEY/d' inventario.log

Mapeamento Caractere a Caractere (y)

Diferente da substituição tradicional, esta operação realiza tradução direta posição por posição entre dois conjuntos de caracteres. Ambos os lados devem possuir exatamente a mesma quantidade de elementos.

# Converte vogais minúsculas para equivalentes maiúsculas sequencialmente
sed 'y/aeiou/AEIOU/' transcrição.text

# Inverte o regime de caixa das letras selecionadas
sed 'y/abcABC/ABCabc/' codigos_hex.txt

# Padroniza hífens para underscores em identificadores técnicos
sed 'y/-_/_' slugs_webpage.html

Tags: sed linux-bash stream-editor text-processing Regex

Publicado em 10-15 05:59