O utilitário sed pode ser usado para imprimir o conteúdo de um arquivo, substituir uma linha (ou várias linhas) e salvar o arquivo. O utilitário sed pode ser usado para imprimir o conteúdo de um arquivo, substituir uma linha (ou várias linhas) e salvar o arquivo.
Exemplos de Uso do Editor sed
#1 o uso mais simples do sed é substituir palavras. Abaixo substituímos casa por hotel no arquivo doc.txt
sed 's/casa/hotel/' doc.txt
#2 para modificar realmente o arquivo use -i
sed -i 's/casa/hotel/' doc.txt
#3 se colocarmos alguma palavra depois do -i será criado um backup com esse sufixo. Como em -i.bak, que cria um arquivo de backup antes da edição.
sed -i.bkp 's/casa/hotel/' doc.txt
#4 para remover # de um arquivo. O # é usado para comentar linhas de código
sed -i '/^#/d' /etc/fstab
#5 para exibir apenas /etc/passwd usuários
sed 's/^\([a-zA-Z_-]\+\).*/\1/' /etc/passwd
acima, agrupa uma correspondência por parênteses () e exibe o grupo correspondente com \1 (referência inversa), que determina o primeiro grupo. Para um segundo grupo, você usaria \2 e assim por diante.
#6 substituir apenas uma palavra.
Veja esse texto que está em doc.txt:
Olá Mundo
a segunda linha deve ser substituída
esta linha deve ser substituída mais tarde
sed '/segunda/s/deve/deveria/' doc.txt
sed primeiro busca pela palavra segunda; depois tem o s para substituir “deve” por “deveria“
#7 sed introduziu um novo sinalizador, /I, que ignora letras maiúsculas e minúsculas e fará a substituição com o mesmo comando:
$ echo "Oi mundo" | sed 's/Mundo/você/I'
Exibindo sequência de linhas de um arquivo
Com o sed, você também pode exibir linhas e sair depois que seus critérios forem atendidos.
sed -n '1,7p' /etc/services é equivalente a sed '3q' /etc/passwd
maria@ti:~$ sed -n '1,7p' /etc/services # Network services, Internet style # # Updated from https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml . # # New ports will be added on request if they have been officially assigned # by IANA and used in the real-world or are needed by a debian package. # If you need a huge list of used numbers please install the nmap package.
Comentar as linhas
Expressões regulares também podem ser usadas com sed
veja o conteúdo desse arquivo
maria@ti:~$ cat meu_script #/usr/bin/env bash este é o primeiro comentário Este é outro comentário # isso é um comentário também echo "Isto não é um comentário e deve ser repetido"
Agora vamos pular a primeira linha que é #!/bin/bash que já está comentada, e comentar a terceira e a quarta linhas. Não iremos comentar a última. Lembre-se que as linhas em branco também são contadas.
sed ‘3,6s/^[^#]/# &/g ‘ meu_script
maria@ti:~$ sed '3,6s/^[^#]/# &/g ' meu_script #/usr/bin/env bash # este é o primeiro comentário # Este é outro comentário # isso é um comentário também echo "Isto não é um comentário e deve ser repetido"
Vamos explicar o comando acima,
- 3,6s define um intervalo, da linha três até a linha seis.
- /^[^#]/ corresponde a tudo que é um caractere e não começa com um hash (#).
- /# &/g substitui uma parte, neste caso coloca um # na frente da linha ditada pelo sinal &.
Alterar linhas específicas
sed também pode manipular intervalos usando um padrão(pattern). Podemos definir um padrão com início e final.
Veja o conteúdo do arquivo
maria@ti:~$ cat meu_texto.txt batatinha frita 123 2 e 3 jogos de amarelinha 9 unidades do produo número 56
o seguinte comando irá comentar a linha iniciada com a palavra “batatinha” e terminada com “2”
maria@ti:~$ sed '/batatinha/,/2/ s/^/#/' meu_texto.txt #batatinha frita 123 #2 e 3 jogos de amarelinha 9 unidades do produo número 56.