Skip to main content

sed | Linux

  • sed | Linux

1. O que é o sed

  • O sed é um utilitário de linha de comando presente em sistemas Unix/Linux que atua como um editor de fluxo (stream editor) — ou seja, lê texto de um arquivo ou de uma entrada, linha a linha, aplica transformações e emite o resultado. ([GNU][1])

  • Foi desenvolvido por Lee E. McMahon nos Bell Labs entre 1973-74 como sucessor natural de utilitários como ed e qed. ([Wikipedia][2])

  • Principais diferenciais:

    • Trabalha em uma única pasada sobre a entrada. ([GNU][1])
    • Ideal para processamento de texto não interativo, automação de transformações de textos (substituir, deletar, inserir linhas etc). ([DigitalOcean][3])

2. Sintaxe Básica

  • Uma forma simples de invocar:

    sed [OPÇÕES] 'SCRIPT' [ARQUIVO...]

    Por exemplo:

    sed 's/hello/world/' input.txt > output.txt

    ([GNU][1])

  • Onde:

    • SCRIPT é o comando (ou conjunto de comandos) sed que define as ações a aplicar.
    • ARQUIVO é o(s) arquivo(s) de entrada. Se não for especificado, o sed lê da entrada padrão (stdin). ([Ask Ubuntu][4])
  • Exemplos de opções comuns:

    • -i — edita o arquivo in-place (sobrescreve) (no GNU sed). ([W3Schools][5])
    • -n — suprime a impressão automática de cada linha (útil se você quiser controlar o que é impresso). ([GeeksforGeeks][6])
    • -e — permite passar múltiplos comandos de edição no script. ([GeeksforGeeks][6])
    • -f — lê comandos sed de um arquivo de script em vez da linha de comando. ([GeeksforGeeks][6])

3. Comandos e operações comuns

Aqui estão alguns dos usos mais frequentes:

3.1 Substituição (comando s)

  • A substituição é provavelmente o uso mais comum:

    sed 's/padrão/substituto/' arquivo

    Exemplo: substituir “unix” por “linux” no arquivo. ([GeeksforGeeks][6])

  • As variações:

    • g — flag “global” para substituir todas as ocorrências na linha (por padrão, só a primeira). ([GeeksforGeeks][6])
    • /n — onde “n” é um número para substituir apenas a n-ésima ocorrência da linha. ([GeeksforGeeks][6])
    • Delimitador customizado — embora “/” seja padrão, você pode usar outro caractere se o padrão ou substituto contiver “/”. ([grymoire.com][7])
    • Uso de grupos de captura para referenciar parte do padrão no substituto (\1, \2, etc). ([grymoire.com][7])

3.2 Deleção de linhas (comando d)

  • Você pode deletar linhas específicas ou que correspondam a um padrão. Exemplo:

    sed '5d' arquivo         # deleta a 5ª linha
    sed '$d' arquivo # deleta a última linha
    sed '3,6d' arquivo # deleta da linha 3 à 6
    sed '/pattern/d' arquivo # deleta todas as linhas que contenham o “pattern”

    ([Hostinger][8])

3.3 Inserção / adição de linhas (i, a)

  • Inserir texto antes ou depois de uma linha:

    sed '3i\Texto a inserir antes da linha 3' arquivo
    sed '3a\Texto a inserir após a linha 3' arquivo

    ([GeeksforGeeks][6])

3.4 Operações com intervalos de linhas ou padrões

  • Você pode especificar endereços (addresses) para comando sed: número de linha, expressão regular, ou intervalo. Exemplo:

    sed '1,3 s/unix/linux/' arquivo   # aplica substituição apenas nas linhas 1-3

    ([GeeksforGeeks][6])

3.5 Uso de espaços de “holding” e operações mais avançadas

  • Sed possui conceito de pattern space (espaço onde a linha está sendo trabalhada) e hold space (espaço de retenção temporária) para operações mais sofisticadas. ([GeeksforGeeks][6])
  • Para transformações mais complexas, scripts sed podem ficar bem elaborados. ([Wikipedia][2])

4. Exemplos práticos

Alguns exemplos para ilustrar:

  • Substituir “unix” por “linux” globalmente num arquivo:

    sed 's/unix/linux/g' geekfile.txt

    ([GeeksforGeeks][6])

  • Substituir apenas na linha 3:

    sed '3 s/unix/linux/' geekfile.txt

    ([GeeksforGeeks][6])

  • Apagar as linhas de 2 até o fim:

    sed '2,$d' arquivo.txt

    ([GeeksforGeeks][6])

  • Usar em pipeline (entrada padrão):

    comando_que_gera_texto | sed 's/x/y/g'

    ([Wikipedia][2])


5. Vantagens, limitações e cuidados

  • Vantagens: funciona bem em scripts, automatização, processamentos em lote. Pode operar sem abrir um editor interativo.

  • Limitações:

    • Por padrão trabalha linha a linha — operações muito complexas (como manipulação multilinha extensa) são mais difíceis ou exigem truques. ([DigitalOcean][3])
    • Algumas versões (por exemplo BSD sed vs GNU sed) têm pequenas diferenças de opções ou comportamento. ([DigitalOcean][3])
  • Cuidados:

    • Se usar -i (edição in-place), sempre faça backup ou verifique antes, pois sobrescreve arquivo original. ([GeeksforGeeks][6])
    • Com expressões regulares e substituições automáticas, verificar primeiro em amostra reduzida para evitar mudanças indesejadas. ([Hostinger][8])

6. Referências recomendadas

  • Manual oficial GNU sed: “sed, a stream editor”. ([GNU][1])
  • Tutorial completo (Tutorialspoint): “Sed Tutorial”. ([Tutorials Point][9])
  • Artigo “Mastering sed command in Linux: A Comprehensive Guide”. ([DigitalOcean][10])
  • Exemplos e explicações no GeeksforGeeks. ([GeeksforGeeks][6])