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
-nSuprime impressão automática; imprime apenas com p
-e 'cmd'Executa um comando sed (encadeie vários com -e)
-f script.sedLê comandos de um arquivo
-i[sufixo]Edita o arquivo no local (sufixo de backup opcional)
-E / -rUsa 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
gSubstitui todas as ocorrências na linha
N (número)Substitui apenas a N-ésima ocorrência
pImprime a linha se a substituição foi feita
w arquivoGrava linhas substituídas em arquivo
i / ICorrespondê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
NLinha de número N
$Última linha
N,MIntervalo de linhas de N a M
/regex/Linhas que correspondem ao regex
/regex1/,/regex2/Intervalo do primeiro ao segundo padrão
N~passoA 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
dApaga o espaço de padrão, inicia próximo ciclo
DApaga até a primeira nova linha no espaço de padrão
pImprime o espaço de padrão
PImprime até a primeira nova linha no espaço de padrão
qSai após imprimir o espaço de padrão atual
QSai 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\textoInsere texto antes da linha atual
a\textoAcrescenta texto após a linha atual
c\textoSubstitui a linha atual pelo texto
r arquivoLê e acrescenta conteúdo do arquivo
R arquivoLê e acrescenta uma linha do arquivo (GNU)
w arquivoGrava o espaço de padrão no arquivo
Espaço de Retenção
Comandos do Espaço de Retenção
hCopia espaço de padrão para o de retenção
HAcrescenta espaço de padrão ao de retenção
gCopia espaço de retenção para o de padrão
GAcrescenta espaço de retenção ao de padrão
xTroca 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ótuloDefine um rótulo de ramificação
b rótuloRamifica (salta) para o rótulo
t rótuloRamifica se o último s/// teve sucesso
T rótuloRamifica 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 -iSufixo é opcional; -i sozinho edita sem backup
BSD/macOS sed -iExige argumento de sufixo; use -i '' sem backup
-i.bakCria arquivo de backup com extensão .bak
Múltiplos arquivossed -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, \2Referê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çosed G — acrescenta linha em branco após cada linha
Remover tags HTMLsed 's/<[^>]*>//g'
Extrair e-mailssed -nE 's/.*([a-z]+@[a-z.]+).*/\1/p'
Comentar linhassed 's/^/# /' — prefixa cada linha com #
Remover linhas em branco no finalsed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
Substituir N-ésima linhased 'Nc\novo texto' — substitui a linha N