fbpx Certificação Linux: Comando sed no Linux (altera textos) [Guia Básico]

Blog

Comando sed no Linux (altera textos) [Guia Básico]

📅 01/01/2019 ⏱ 4 min ✍️ Uira Ribeiro
Linuxcomandos
Comando sed no Linux (altera textos) [Guia Básico]

O comando sed no Linux é um editor de textos simples utilizado para fazer pequenas transformações no conteúdo dos arquivos. Ele utiliza o padrão POSIX ERE para expressões regulares.

O sed recebe um texto de um ou mais arquivos passados como argumento na linha de comando e o transforma enviando a modificação para a saída padrão STDOUT (monitor de vídeo).

Se quisermos que o sed realmente altere o conteúdo do arquivo é necessário utilizarmos o redirecionador maior-que “>” para um outro arquivo qualquer.

Outra possibilidade é usar a  opção “-iSUFIXO” que possibilita editar diretamente o arquivo original e salvando uma cópia de segurança com o nome do arquivo seguido do SUFIXO indicado.

As opções do sed são:

  • -iSUXIFO     altera o arquivo
  • -e                 imprime na tela sem alterar o arquivo
  • -n                 faz a supressão, mostra só o resultado do comando
  • -f arquivo    Lê um script com expressões do sed

Os comandos que o sed aceita são:

  • 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

Para trocar ocorrências por outro texto, a opção "s" do sed pode ser utilizada. As barras normais "/" são usadas para separar o texto a ser buscado e o texto novo. Neste caso, a troca é enviada para a saída padrão STDOUT e o arquivo permanece intacto:

$ sed "s/velho/novo/"  arquivo

Para troca o nome uira pelo nome carla no arquivo /etc/passwd e imprimir na saída padrão:

$ sed ‘s/uira/carla/’ /etc/passwd

Neste exemplo abaixo a ocorrência /usr/local/bin é alterada para /usr/bin e gravada em textonovo.txt sem alterar o arquivo original. O uso da conta-barra foi necessário para indicar que o caracter "'/" do caminho não é o separador de substituição do sed:

$ sed ‘s/\/usr\/local\/bin/\/usr\/bin/’ texto.txt > textonovo.txt 

Você pode optar por utilizar a opção –i, de forma que o sed irá alterar o arquivo e manter um backup do arquivo original em arquivo.bkp

$ sed –i.bkp ‘s/\/usr\/local\/bin/\/usr\/bin/’ arquivo

Coloca a palavra "comprar" no início de cada linha:

$ sed 's/^/comprar /' supermercadocomprar arrozcomprar feijão
comprar carnecomprar batatacomprar alfacecomprar tomatecomprar arroz

Imprime somente a terceira linha do arquivo supermercado:

$ sed -n '3p' supermercado carne

Imprime da terceira até a quinta linha do arquivo supermercado:

$ sed -n '3,5p' supermercado carnebatataalface

O comando "d" pode ser usado para apagar todas as linhas que contém a palavra carne e cria uma cópia:

$ sed -i.bkp '/carne/d' supermercado $ cat supermercadoarrozfeijãobatataalfacetomatearroz

Troca todas as ocorrências de arroz e batata por couve-flor:

$ sed 's/arroz\|batata/couve-flor/' supermercadocouve-florfeijãocouve-floralfacetomatecouve-flor

Apaga todas as linhas em branco, alterando o arquivo:

$ sed -i '/^$/d' arquivo.txt

Retira todas as TAGs HTML do arquivo:

$ sed 's/<[^>]*>//g' arquivo.txt

Um conjunto de expressões do sed pode ser gravado em arquivo texto para ser lido por ele como um interpretador com a opção -f. Neste caso, varios comandos do sed foram gravados em um arquivo chamada expressoes:

$ cat expressoess/carla/uira/s/<p>/<p align=center>/
$ sed -f expressoes arquivo.txt

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Especialista Linux com mais de 20 anos de experiência.
Autor de 5 livros e mentor de mais de 14.000 alunos certificados.
20 certificações de alto nível, incluindo LPIC-3, CKA, RHCE e AWS Solutions Architect.

WhatsApp