SUPER PROMOÇÃO BLACK FRIDAY - SOMENTE HOJE - APROVEITE!

Clique Aqui

DlteC do Brasil

  • Home
  • Cursos
  • Ebooks
  • Blog
  • Preços
  • Entrar
Linux

O Comando SED no Linux

Leandro Siqueira - 10 de novembro de 2020

O comando sed é um editor poderoso de fluxo de textos, utilizado para filtrá-los e transformá-los.

O comando trabalha tanto a partir de fluxos provenientes de um pipe ou a partir de arquivos. Ao finalizar cada linha em que trabalha, o comando passa para a seguinte (até o final do texto). Sua saída-padrão (STDOUT) é a tela do terminal (mas também consegue trabalhar com redirecionamentos).

Esse conteúdo faz parte do nosso curso “Comandos GNU Linux e Unix ” que é parte integrante da trilha preparatória para a certificação Linux LPI 101.

Principais opções:

–e, –expression: Adiciona uma expressão aos comandos a serem executados.
-f, –file: Adiciona conteúdos presentes em um arquivo a serem aplicados ao comando.
-i, –in-place: Realiza as alterações diretamente no arquivo.
-r, –regexp-extended: Utiliza expressões regulares estendidas.

Vamos iniciar os estudos aplicando o comando em cenários onde a necessidade seja para substituir dados. Aplicando o comando ao fluxo oriundo da entrada-padrão (stdin), ou seja, do teclado:

dltec@cap3:~$ echo “Estou estudando o comando sed” | sed ‘s/estudando/devorando/’

Estou devorando o comando sed

Perceba que o subcomando s substitui o primeiro termo (estudando) pelo segundo (devorando).

Agora, vamos ver a atuação do comando sobre arquivos. Veja a seguir:

Criação do arquivo ListaCarros

dltec@cap3:~$ cat > ListaCarros
PeugeotPeugeot Peugeot
RenaultPeugeot Peugeot
Ford
Chevrolet
Toyota
Fiat
Audi

Suponhamos que precisássemos substituir somente a primeira ocorrência de cada linha que contenha a palavra “Peugeot” por “Honda”.

dltec@cap3:~$ sed ‘s/Peugeot/Honda/’ ListaCarros

HondaPeugeot Peugeot
RenaultHonda Peugeot
Ford
Chevrolet
Toyota
Fiat
Audi

Note que o arquivo original não é alterado – o resultado é somente exibido na STDOUT. Para que ele seja alterado, é necessário utilizar a opção -i ou os redirecionadores de fluxos de texto.

Se o objetivo for alterar todas as palavras Peugeot do texto, poderíamos utilizar a flag ‘g’:

dltec@cap3:~$ sed ‘s/Peugeot/Honda/g’ ListaCarros
HondaHonda Honda
RenaultHonda Honda
Ford
Chevrolet
Toyota
Fiat
Audi

Também é possível informar ao sed para que este realize mais de uma tarefa. Imagine o seguinte cenário:

1 – Alterar somente a primeira ocorrência de cada linha que contenha o termo Audi por Ford.

2 –Substituir todas as ocorrências do termo Peugeot (que estejam situadas entre a primeira e a terceira linha do arquivo) por HondaII.

dltec@cap3:~$ sed -e ‘s/Audi/Honda/1; 1,3 s/Peugeot/HondaII/g’ ListaCarros

HondaIIHondaII HondaII
RenaultHondaII HondaII
Ford
Chevrolet
Toyota
Fiat
Honda

Também podemos especificar ao comando sed para que este trabalhe com dados a partir das instruções contidas em um arquivo:

Criação dos arquivos de instruções

dltec@cap3:~$ cat > arquivoDeComandos
s/Peugeot/peugeot/
s/Renault/renault/

dltec@cap3:~$ sed -f arquivoDeComandos ListaCarros
peugeotPeugeot Peugeot
renaultpeugeot Peugeot
Ford
Chevrolet
Toyota
Fiat
Audi

Observe outros exemplos:

Altera somente a segunda ocorrência do termo Peugeot por Honda

dltec@cap3:~$ sed ‘s/Peugeot/Honda/2’ ListaCarros
PeugeotHonda Peugeot
RenaultPeugeot Honda
Ford
Chevrolet
Toyota
Fiat
Audi

Substitui somente a primeira ocorrência da palavra “Peugeot” por “peugeot”

(em cada linha), utilizando a flag p – redirecionando a saída através do pipe

para o comando nl, de forma que este enumere as linhas

dltec@cap3:~$ sed ‘s/Peugeot/peugeot/p’ ListaCarros | nl

1 peugeotPeugeot Peugeot
2 peugeotPeugeot Peugeot
3 Renaultpeugeot Peugeot
4 Renaultpeugeot Peugeot
5 Ford
6 Chevrolet
7 Toyota
8 Fiat
9 Audi

Note que, ao utilizarmos a flag “p”, o comando sed aplica as alterações na linha em que encontrar correspondência e, em seguida, as imprime novamente. Ou seja, aquelas linhas onde as substituições foram efetuadas são exibidas de forma duplicada. Para alterar esse comportamento, podemos utilizar a opção -n:

dltec@cap3:~$ sed -n ‘s/Peugeot/peugeot/p’ ListaCarros | nl
1 peugeotPeugeot Peugeot
2 Renaultpeugeot Peugeot

Agora, vamos substituir todas as ocorrências do termo “Peugeot” por “Honda”, desde que estejam situadas entre a primeira e a terceira linha (mas utilizando o pipe para redirecionar a saída do comando cat ao comando sed):

dltec@cap3:~$ cat ListaCarros | sed ‘1,3 s/Peugeot/Honda/g’
HondaHonda Honda
RenaultHonda Honda
Ford
Chevrolet
Toyota
Fiat
Audi

A última linha poderá ser manipulada através do caractere “$”. Dessa forma, vamos a seguir substituir todas as ocorrências do termo “Peugeot” por “Volkswage”, situadas entre a segunda e a última linha:

dltec@cap3:~$ sed ‘2,$ s/Honda/Volkswagen/g’ ListaCarros

PeugeotPeugeot Peugeot
RenaultVolkswagen Volkswagen
Ford
Chevrolet
Toyota
Fiat
Audi

Troca a palavra Ford por Cord, utilizando a flag y

dltec@cap3:~$ sed ‘y/Ford/Cord/’ ListaCarros
Peugeot Peugeot Peugeot
Renault Peugeot Peugeot
Cord
Chevrolet
Toyota
Ciat
Audi

Agora, vamos enviar ao arquivo “ListaCarrosAlterado” todo o conteúdo do arquivo “ListaCarros” – exceto a primeira e a segunda linha (usando a flag “d”):

dltec@cap3:~$ sed ‘1,2 d’ ListaCarros > ListaCarrosAlterado

dltec@cap3:~$cat ListaCarrosAlterado
Ford
Chevrolet
Toyota
Fiat
Audi

No próximo exemplo, vamos remover a linha que inicia (^) com o texto “Ford” e, em seguida, vamos redirecionar o conteúdo restante do arquivo ao “ListaCarrosAlterado”:

dltec@cap3:~$ sed ‘/^Ford/d’ ListaCarros > ListaCarrosAlterado

dltec@cap3:~$ cat ListaCarrosAlterado
PeugeotPeugeot Peugeot
RenaultPeugeot Peugeot
Chevrolet
Toyota
Fiat
Audi

Outro flag muito utilizado é o “q”. Ao ser aplicado, este permite ao comando parar a sua execução após encontrar o padrão especificado. Por exemplo, podemos utilizá-lo para ler as primeiras 15 linhas do arquivo /etc/passwd:

dltec@cap3:~$ sed “15q” /etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh

O comando sed é bastante rico em possibilidades. Abra o manual e visualize as demais possibilidades. Voltaremos a ele ainda neste capítulo, quando estudarmos sobre as expressões regulares.

Lembrando que isso é apenas uma parte do conteúdo do curso “Comandos GNU Linux e Unix“. Caso você tenha interesse em se especializar em Linux não deixe de conhecer o conteúdo completo em nosso portal.

 0 0
Share Now

Leandro Siqueira

Graduado em Análise de Sistemas pela Universidade Salgado de Oliveira (UNIVERSO) e pós-graduado em Engenharia de Software pela Escola Politécnica da Universidade Federal do Rio de Janeiro (UFRJ). Certificado ITIL Foundations, ISO 20000 Foundation Bridge e LPIC-1. Atua profissionalmente na área de TI desde 2010 - com foco em desenvolvimento de sistemas de informação e ensino de tecnologia.

Leave a Reply Cancel Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Previous Post Distância Administrativas em Roteadores Cisco
Next Post Balanceamento de Cargas no EIGRP

Artigos Populares

  • Subrede IP: Máscaras possíveis para classes A, B e C
  • Qual a Diferença entre Modelo OSI e TCP/IP?
  • Passo a Passo para Resolver Problemas de Conectividade de Rede
  • Como descobrir o MAC de um host se eu tenho apenas o IP?
  • Configurando Porta e VLAN em Switch Cisco de Acesso

Entre para a lista vip

Cursos Online Gratuitos com Opção de Certificado
  • Contato
  • Crie sua conta
  • Login

DlteC do Brasil - Todos os direitos reservados