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: 69.844 ]

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

Pipelines (Canalizadores)

AWK - Introdução

LibreOffice Math

Processos

Shell - Funções

Leitura recomendada

AWK - Manipulação de arquivos de texto

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

Slackware - Script de instalação de programas

Introduzindo prazerosamente aos poucos... o shell script

Variáveis, if, else e unless em Ruby

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts