Pular para o conteúdo

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.
jarlisson moreira jarlisson
Hits: 87.988 Categoria: Shell Script Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Parte 7: 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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   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

AWK - Introdução

Processos

Shell - Funções

Pipelines (Canalizadores)

LibreOffice Math

Introdução ao Shell Script

Introduzindo prazerosamente aos poucos... o shell script

Personalize seu shell na entrada de seu logon

Cansou do Konsole e GNOME-Terminal? Existem outros terminais, escolha o seu!

expr - Definição e uso do comando

#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

Entre na sua conta para comentar.