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
Tag:/dev, bash, certificação, certificaçãolinux, code, Comptia, developer, empreendedorismo, exame, freesoftware, gnu, hack, Linux, linuxfan, linuxfun, linuxmint, lovelinux, LPI, LPIC, management, nerd, opensource, php, prova, shell, software, softwarelivre, sql, tech, ti, unix