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