REFERÊNCIA RÁPIDA DE SED
Edição de fluxo, substituição, endereços, espaço de retenção, transformações no local
Básico
Executando o sed
sed 's/old/new/' file.txt # substitui primeira ocorrência por linha
sed 's/old/new/g' file.txt # substitui todas as ocorrências por linha
sed -n '5p' file.txt # imprime apenas a linha 5
sed '3d' file.txt # apaga a linha 3
echo "hello" | sed 's/hello/hi/' # entrada via pipe
Opções de Linha de Comando
| -n | Suprime impressão automática; imprime apenas com p |
| -e 'cmd' | Executa um comando sed (encadeie vários com -e) |
| -f script.sed | Lê comandos de um arquivo |
| -i[sufixo] | Edita o arquivo no local (sufixo de backup opcional) |
| -E / -r | Usa expressões regulares estendidas |
Substituição
Sintaxe de Substituição
sed 's/foo/bar/' f # primeira ocorrência por linha
sed 's/foo/bar/g' f # todas as ocorrências
sed 's/foo/bar/3' f # apenas a 3ª ocorrência
sed 's/foo/bar/gi' f # todas, sem distinção de maiúsculas
sed 's|/usr/bin|/opt/bin|g' f # delimitador alternativo
Flags de Substituição
| g | Substitui todas as ocorrências na linha |
| N (número) | Substitui apenas a N-ésima ocorrência |
| p | Imprime a linha se a substituição foi feita |
| w arquivo | Grava linhas substituídas em arquivo |
| i / I | Correspondência sem distinção de maiúsculas (GNU) |
Endereços
Exemplos de Endereços
sed '3s/a/b/' f # apenas na linha 3
sed '2,5s/a/b/' f # linhas 2 a 5
sed '/^#/d' f # apaga linhas que começam com #
sed '/start/,/end/d' f # apaga intervalo entre padrões
sed '1~2d' f # apaga linhas ímpares (GNU)
Tipos de Endereço
| N | Linha de número N |
| $ | Última linha |
| N,M | Intervalo de linhas de N a M |
| /regex/ | Linhas que correspondem ao regex |
| /regex1/,/regex2/ | Intervalo do primeiro ao segundo padrão |
| N~passo | A partir de N, a cada N-ésima linha (GNU) |
| end! | Negação — aplica a linhas que não correspondem |
Apagar e Imprimir
Comandos de Apagar e Imprimir
sed '5d' f # apaga a linha 5
sed '/^$/d' f # apaga linhas em branco
sed -n '10,20p' f # imprime linhas 10–20
sed -n '/error/p' f # imprime linhas que correspondem ao padrão
sed '/debug/!d' f # mantém apenas linhas correspondentes
Referência de Comandos
| d | Apaga o espaço de padrão, inicia próximo ciclo |
| D | Apaga até a primeira nova linha no espaço de padrão |
| p | Imprime o espaço de padrão |
| P | Imprime até a primeira nova linha no espaço de padrão |
| q | Sai após imprimir o espaço de padrão atual |
| Q | Sai sem imprimir (GNU) |
Inserir e Acrescentar
Inserir, Acrescentar, Alterar
sed '3i\linha inserida' f # insere antes da linha 3
sed '3a\linha acrescentada' f # acrescenta após a linha 3
sed '3c\linha substituída' f # substitui a linha 3
sed '/marcador/a\nova linha' f # acrescenta após correspondência
Comandos
| i\texto | Insere texto antes da linha atual |
| a\texto | Acrescenta texto após a linha atual |
| c\texto | Substitui a linha atual pelo texto |
| r arquivo | Lê e acrescenta conteúdo do arquivo |
| R arquivo | Lê e acrescenta uma linha do arquivo (GNU) |
| w arquivo | Grava o espaço de padrão no arquivo |
Espaço de Retenção
Comandos do Espaço de Retenção
| h | Copia espaço de padrão para o de retenção |
| H | Acrescenta espaço de padrão ao de retenção |
| g | Copia espaço de retenção para o de padrão |
| G | Acrescenta espaço de retenção ao de padrão |
| x | Troca espaços de padrão e retenção |
Exemplos do Espaço de Retenção
sed -n '1!G;h;$p' f # inverte linhas (tac)
sed '/^$/{ x; s/\n//; x; }' f # colapsa retenção em branco
sed -n 'H;${x;s/\n/ /g;p;}' f # junta todas as linhas com espaço
Múltiplos Comandos
Encadeando Comandos
sed -e 's/foo/bar/g' -e 's/baz/qux/g' f
sed 's/foo/bar/g; s/baz/qux/g' f
sed '/header/{ s/old/new/; s/foo/bar/; }' f
sed -f commands.sed input.txt
Agrupamento e Ramificação
| { cmd1; cmd2; } | Agrupa comandos para o mesmo endereço |
| :rótulo | Define um rótulo de ramificação |
| b rótulo | Ramifica (salta) para o rótulo |
| t rótulo | Ramifica se o último s/// teve sucesso |
| T rótulo | Ramifica se o último s/// falhou (GNU) |
Edição no Local
Exemplos de Edição no Local
sed -i 's/old/new/g' file.txt # edita no local (GNU)
sed -i.bak 's/old/new/g' file.txt # backup como file.txt.bak
sed -i '' 's/old/new/g' file.txt # no local no macOS (sem backup)
sed -i '/^#/d' config.txt # remove comentários no local
Notas de Plataforma
| GNU sed -i | Sufixo é opcional; -i sozinho edita sem backup |
| BSD/macOS sed -i | Exige argumento de sufixo; use -i '' sem backup |
| -i.bak | Cria arquivo de backup com extensão .bak |
| Múltiplos arquivos | sed -i 's/a/b/g' *.txt edita todos os arquivos correspondentes |
Regex
Regex no sed
| . | Qualquer caractere único |
| * | Zero ou mais do anterior |
| \+ | Um ou mais (BRE) — + em ERE |
| \? | Zero ou um (BRE) — ? em ERE |
| ^ | Início da linha |
| $ | Fim da linha |
| [abc] | Classe de caracteres |
| \( \) | Grupo de captura (BRE) — () em ERE |
| \1, \2 | Referência retroativa ao grupo de captura |
| & | String inteira correspondida (na substituição) |
Exemplos de Regex
sed 's/[0-9]\+/NUM/g' f # substitui números
sed -E 's/(foo)(bar)/\2\1/g' f # troca grupos (ERE)
sed 's/.*/(&)/' f # envolve linha em parênteses
sed 's/[ \t]*$//' f # remove espaços finais
Padrões Comuns
One-Liners
sed -n '1p' f # primeira linha (head -1)
sed '$!d' f # última linha (tail -1)
sed '/^$/d' f # remove linhas em branco
sed 's/^[ \t]*//' f # remove espaços iniciais
sed '=' f | sed 'N;s/\n/\t/' f # numera linhas
Receitas
| Duplo espaço | sed G — acrescenta linha em branco após cada linha |
| Remover tags HTML | sed 's/<[^>]*>//g' |
| Extrair e-mails | sed -nE 's/.*([a-z]+@[a-z.]+).*/\1/p' |
| Comentar linhas | sed 's/^/# /' — prefixa cada linha com # |
| Remover linhas em branco no final | sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' |
| Substituir N-ésima linha | sed 'Nc\novo texto' — substitui a linha N |