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 /' supermercado
comprar arroz
comprar feijão comprar carne
comprar batata
comprar alface
comprar tomate
comprar 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 
carne
batata
alface

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 supermercado
arroz
feijão
batata
alface
tomate
arroz

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

$ sed 's/arroz\|batata/couve-flor/' supermercado
couve-flor
feijão
couve-flor
alface
tomate
couve-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 expressoes
s/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