Sed - Introdução

Introdução ao Sed, por meio de exemplos, cobrindo os tópicos: enviando dados pro sed, selecionando as linhas para edição, substituição, scripts em sed, expressões regulares, referências por &, back reference, hold space/ espaço reserva, dicas de comandos, jogos, exemplos e material para prosseguir nos estudos sobre Sed.

[ Hits: 84.825 ]

Por: jarlisson moreira em 16/07/2012


Substituindo



Esta é uma das funções mais importantes do sed, substituir um trecho de texto por outro.

O modelo de comando para substituir uma coisa por outra é: s/substitua_isso/por_isso/

A substituição será feita na primeira ocorrência de 'substitua_isso' na LINHA.

Se quiser que a substituição ocorra em todas as ocorrências em uma linha, use a flag "g", ao final de 's///': s/substitua_isso/por_isso/g

Vamos testar. Crie o arquivo: frase.txt

Escreva nele: O vento do duende vem de roxo quando pisca na inconsciência do javali

Obviamente, esta frase não faz o menor sentido. Mas fará com a seguinte alteração:

cat frase.txt | sed 's/javali/duende/'

Pois ela substituirá a primeira ocorrência de 'javali' e irá substituir por 'duende'.

Caso nunca tenha estudado expressões regulares, '^' se refere ao início da linha e '$' ao final.

Teste:

cat frase.txt | sed 's/^/INICIO/'
$ cat frase.txt | sed 's/$/FIM/'


Como exercício, coloque um ponto final ao fim da frase, de duas maneiras diferentes.

Outras flags de substituição:
  • NUMERO :coloque um numero ao final de s/// para especificar o número da ocorrência a ser substituída
  • p :mostra o que foi substituído
  • w output :o 'w' é de escrever. Ou seja, manda o que resultado da substituição para o arquivo 'output'
  • i ou I :para substituição ser case-insensitive (não importa se é maiúsculo ou minúsculo)
  • m ou M :faz com que a '^' reconheça uma string vazia após a newline e uma vazia antes do '$'

Outros separadores

Se quisermos alterar um endereço "/etc" por "/dev", podemos fazer: s/\etc/\/dev/

Pois, para usar o "/" como caractere, devemos colocar "\" antes.

Ou substituir o separador. Não é obrigado o uso de "/", no "s///".

Podemos usar ":" e teríamos "s:::". Ficaria: s:/etc:/dev:

Apagando

Apagar, em suma, é substituir uma coisa por nada.

Para apagar 'javali' de nossa frase, fazemos:

cat frase.txt | sed 's/javali//'

Ou seja, trocamos 'javali' por nada. Embora saibamos que sem o javali a frase não fará o menor sentido.

Substituição através de endereços

Assim, o comando deletar 'd', podemos agir especificamente em uma linha. Para isso, basta dizer qual linha se quer atuar. Por exemplo, vamos substituir o número 3, da linha 3 no teste.txt, por 2112:

cat teste.txt | sed '3s/10/2112/'

Analogamente, poderíamos usar um intervalo de endereços ou endereços em PA.\

Vamos colocar "0" antes de cada número:

cat teste.txt | sed '1,6s/^/0/'

Múltiplas edições

De volta à nossa frase: "O vento do duende vem de roxo quando pisca na inconsciência do javali".

Se quisermos substituir 'duende' por 'gnomo' e 'javali' por 'porco', não precisamos usar dois comandos de sed:

cat frase.txt | sed 's/duende/gnomo/'
$ cat frase.txt | sed 's/javali/porco/'


Podemos fazer:

cat frase.txt | sed 's/duende/gnomo/ ; s/javali/porco/'

Ou seja, apenas separamos os comandos de substituição por meio de ponto e vírgula. Como está tudo entre ' ', é como se fosse um comando só.

Outra forma é através da flag "-e", que se refere a múltiplos comandos:

cat frase.txt | sed -e 's/duende/gnomo/' -e 's/javali/porco/'

Outra forma, mais organizada e clara, de fazer múltiplas edições é utilizando o bash, que sabe quando ainda não terminamos de digitar os comandos. Ele sabe disso por conta do ' (aspas). O comando só é completo quando houverem dois ' (aspas).

Veja:

cat frase.txt | sed 's/duende/gnomo/ [ENTER]
s/javali/porco/ [ENTER]
' [ENTER]

O sed só roda depois do último ENTER.

É interessante se utilizar dessa terceira maneira quando seus comandos forem ficando grandes e complexos. Sábio bash!

Página anterior     Próxima página

Páginas do artigo
   1. Introdução - o que é e para que serve
   2. Enviando dados para o sed
   3. Substituindo
   4. Scripts em sed
   5. Expressões regulares
   6. Referenciando com & - Back reference
   7. Hold space
   8. Por onde prosseguir e considerações finais
Outros artigos deste autor

Processos

Pipelines (Canalizadores)

AWK - Introdução

LibreOffice Math

Shell - Funções

Leitura recomendada

Criando um banner em flash no Linux

Shell Script 1 - Básico

expr - Definição e uso do comando

Bitwise - Escovando os bits

Simples e rápido: matando todos os processos de um usuário

  
Comentários
[1] Comentário enviado por eldermarco em 16/07/2012 - 10:53h

Muito bom! Super bem escrito e bastante didático, exatamente como o artigo sobre o AWK que você escreveu. Nota 10!

[2] Comentário enviado por removido em 16/07/2012 - 12:42h

i like too!

[3] Comentário enviado por eduardo em 16/07/2012 - 14:13h

Ótimo artigo! Parabéns! Acabei de perceber que uso menos de 5% do poder do sed. :)

[4] Comentário enviado por sir.guil em 16/07/2012 - 15:05h

Parabéns, era uma coisa que faltava aqui no vol,

sempre que precisei estudar o sed, dependi do http://aurelio.net/sed/

agora estamos + completos

[5] Comentário enviado por julio_hoffimann em 16/07/2012 - 17:56h

Novamente parabéns Jarlisson!

Artigos bastante claros que ajudarão muitos no VOL.

Abraço!

[6] Comentário enviado por marcelo.castro.l em 17/07/2012 - 08:10h

Cara, muito bom esse artigo.
Salvou minha pátria aqui na empresa.
Precisava manipular um arquivo gerado pelo:

#iptables -L

Porém não precisava dele formatado com os espaços, graças ao "sed" tudo fluiu perfeitamente.

Obrigado!

[7] Comentário enviado por H4cktz em 19/02/2019 - 12:09h

Muito bom! Super bem escrito e bastante didático, Nota 1000! Finalmente estou aprendendo SED!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts