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.847 ]

Por: jarlisson moreira em 16/07/2012


Hold space



Também conhecido como espaço reserva, é um espaço temporário do sed, onde podemos inserir e extrair algumas informações de lá. Diferente do espaço padrão, o buffer do sed, o espaço reserva não permite que editemos coisas nele, permite apenas que coloquemos e tiremos linhas.

Nessa de colocar algo no buffer, passar pro hold, escrever algo novamente buffer e depois pegar a informação que estava no hold, podemos fazer magias.

Há 3 comandos básicos para lidar com o hold space:
  • h ou H :Sobrescreve(h) ou anexa(H) no hold space um conteúdo do buffer.
  • g ou G :Sobrescreve(g) ou anexa(G) no buffer um conteúdo do hold space.
  • x :Troca os conteúdos do buffer e hold space.

OK, vamos à mágica:

cat teste.txt | sed -ne '1!G' -e 'h' -e '$p'

Nosso "teste.txt" é um arquivo numerado de 1 a 6.

Uma análise sobre a função de cada comando:
  • 1!G: se a linha que está sendo atualizada não for a primeira, anexa no buffer o que está no hold space
  • h: coloca no hold space o que está no buffer
  • $p: se a linha atual for a última, imprimir

Vamos fazer como o sed faz, analisar linha por linha.

1ª) Linha:
Primeiro comando: não é executado.
Segundo comando: colocamos o número 1 no hold space.
Terceiro comando: não executa.


2ª) Linha:
Primeiro comando: no buffer temos o 2, e anexamos o 1 a ele (estava no hold).
Segundo comando: coloca 2 e 1 no hold.
Terceiro comando: nada.


3ª) Linha:
Primeiro comando: no buffer temos 3, e anexamos o 2 e o 1(estavam no hold).
Segundo comando: colocamos 3, 2 e 1 no hold.
Terceiro comando: nada.


4ª) Linha:
Primeiro comando: no buffer temos o 4, e anexamos 3,2 e 1(estavam no hold).
Segundo comando: colocamos 4, 3, 2 e 1 no hold.
Terceiro comando: nada.


Ou seja, é fácil ver que, quando estamos numa linha do arquivo, todas as anteriores estão no hold. E adicionamos ao buffer atual o que está no hold, ou seja, adicionamos a linha atual todas as linhas anteriores.

Lembrando que, ao adicionar, não estávamos adicionando uma nova linha, e sim o número ao final da linha atual do buffer.

Quando chegarmos na última linhas, a 6ª, adicionamos o que está no hold: 5 4 3 2 1

Ou seja, este script imprime um arquivo ao contrário, da última para a primeira linha.

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

LibreOffice Math

Shell - Funções

Processos

AWK - Introdução

Pipelines (Canalizadores)

Leitura recomendada

Variáveis, if, else e unless em Ruby

AWK - Introdução

Introdução ao uso de Shell Script

Backup automático em Shell Script

Como matar um processo - kill, killall, pkill e xkill

  
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