O `sed` é uma ferramenta de linha de comando muito poderosa usada em sistemas Unix/Linux para **processar e transformar texto**. O nome vem de **Stream EDitor**, ou seja, ele lê dados linha por linha (stream) e pode aplicar comandos de edição como substituição, inserção, deleção e muito mais.
- Substitui texto dentro de arquivos ou streams.
- Deleta linhas específicas.
- Insere ou adiciona texto.
- Extrai padrões com regex.
- Tudo isso sem precisar abrir o arquivo em um editor como o `vim`.
### Parâmetros mais usados:
- `-i` Altera o arquivo
- `-e` Imprime na tela sem alterar o arquivo
- `-n` Faz a supressão, mostra só o resultado do comando
- `s` Substitui um trecho de texto por outro
- `!` Inverte a lógica do comando
- `;` Separador de comandos
- `|` Separador de strings
- `d` No final deleta
- `p` No final imprime
- `g` No final (como se usa o d e p) altera todas as ocorrências
- `q` Sai do sed , não continua o comando
### Comandos Básicos
Substituir texto em um arquivo
```shell
# Substitui a palavra "velho" por "novo":
sed 's/velho/novo/' arquivo.txt
```
Imprime apenas a nona linha:
```shell
sed -n '9p' arquivo.txt
```
Imprime da sexta linha até a nona linha
```shell
sed -n '6,9p' arquivo.txt
````
Deleta todas as lihas que contém a palavra string no arquivo
```shell
sed -i '/string/d' arquivo.txt`
```
### Comandos Uteis
```shell
# Coloca uma palavra no INÍCIO de cada linha
sed 's/^/palavra/' arquivo.txt
# Coloca uma palavra no final de cada linha
sed 's/$/palavra/' arquivo.txt
# Imprime só as linhas que COMEÇAM com a string 'http'
sed -n '/^http/p' arquivo.txt
# Deleta só as linhas que COMEÇAM com a string 'http'
sed -n '/^http/d' arquivo.txt
# Troca TODAS ocorrências da palavra “marcos”, “eric”, “camila” pela palavra “pinguim”
sed 's/marcos\|eric\|camila/pinguim/g' arquivo.txt
# Deleta linha em branco e altera o arquivo
sed -i '/^$/d' arquivo.txt
# Substitui “foo” por “bar” somente as linhas que contém "plop"
sed '/plop/s/foo/bar/g' arquivo.txt
# Substitui "foo" por "bar" exceto as linhas que contém "plop"
sed '/plop/!s/foo/bar/g' arquivo.txt
# Insere da Linha 2 a linha 7 o “#” no início de cada linha
sed '2,7s/^/#/' arquivo.txt
# Insere a palavra ‘NEW’ no início de cada linha, da linha 21 até a linha 28
sed -i '21,28s/^/NEW/' arquivo.txt
# @ Troca tudo entre as tags "<" e ">" pela palavra “CODIGO”:
sed 's/<[^>]*>/CODIGO/g' arquivo.txt
# Imprime somente a primeira ocorrência da linha com determinada string
sed -n '/dia/{p;q;}' arquivo.txt
# Inclue texto no final da linha 9
sed '9s/$/final da linha/' arquivo.txt
# Coloca todas as linhas em uma só
sed ':a;$!N;s/\n//;ta;' arquivo.txt
# Substitui a palavra “BELEZA” por “SIM” somente entre determinadas linhas
sed '3,6s/BELEZA/SIM/' arquivo.txt
# Apaga o que está entre a palavra “falou” e “segundo” ( delimitadores )
sed '/segundo/{/falou/{s/segundo.*falou//;t};:a;/falou/!{N;s/\n//;ta;};s/segundo.*falou/\n/;}' arquivo.txt
# Apaga o 1o caracter da frase
sed 's/.//' arquivo.txt
# Apaga o 4o caractere da frase
sed e's/.//4' arquivo.txt
# Awf Apaga os 4 primeiros caracteres
sed 's/.\{4\}//' arquivo.txt
# - Apaga no mínimo 4 caracteres
sed 's/.\{4,\}//' arquivo.txt
# Apaga de 2 a 4 caracteres (o máx. que tiver)
sed 's/.\{2,4\}//' arquivo.txt
# Exemplos de intervalo
echo "aáeéiíoóuú" | sed "s/[a-u]//g"
# Apagar números
sed '1,/[0-9]\{3\}/d' arquivo.txt
# Imprime só linhas que contém PONTUAÇÃO
s/[0-9]\+//g' arquivo.txt
# Imprime só linhas que começam com Números
sed -n '/[[:punct:]]/p' arquivo.txt
sed -n '/^[[:digit:]]/p' arquivo.txt
```