Já faz 10 anos que uso o Sed

Comemoração de 10 anos do meu site AURELIO.NET
Parte 3

  1. 10 anos de sáite
  2. 10anos: Vim
  3. 10anos: Sed
  4. 10anos: Expressões Regulares

————— ∞ —————

Lá pelos idos de 1997, em uma tarde de trabalho na Conectiva…

Arnaldo, aqui no meu script eu precisava trocar essa palavra por outra, tem algum comando que faz isso?
— Tem um lá, cuméunómi, sed! Pergunta pro cachorrão que ele manja.

(caminho até a sala ao lado)

— Fábio, me disseram que você manja de um tal de sed.
— Sei usar mais ou menos, o bichinho é meio complicado.
— Minsina?
— Tá.

E este foi o dia em que conheci o Sed pela primeira vez. O Fábio “cachorrão” me mostrou como fazer um s///g e explicou que isso trocava uma palavra por outra. Ele disse que tinha uns curingas que dava pra usar também, tipo o asterisco, mas ele não sabia direito e ia na tentativa e erro. Um tempo depois fui descobrir que os tais curingas eram as Expressões Regulares, mas essa é uma história para um próximo post dessa série dos 10 anos :)

Ah, os bons tempos do início de Conectiva. O Unix/Linux ainda era um desconhecido mundo novo, que cada um ali sabia um pouco e juntos tínhamos um corpo técnico que conseguia se entender no sistema. A documentação disponível era somente as man pages e as escassas listas de discussão. A Internet não era tão informativa e útil quanto hoje.

Passei um bom tempo somente usando o tradicional s/isso/aquilo/g sem pensar muito sobre o Sed, pois afinal, ele estava fazendo o que eu queria: trocar palavras.

Engraçado que demorei para aprender que o g no final do s///g não era obrigatório! Para mim desde o início o g fazia parte da estrutura do comando e pronto. Começa com s, termina com g e bota três barras no meio. Faz sentido, não? :)

Depois da primeira grande descoberta que o g era um modificador para o comando, e que eu podia trocar somente a primeira palavra caso eu não o utilizasse, fui ler a man page do Sed para ver se não conseguia aprender mais alguma dica útil sobre o comando. Então descobri que eu podia colocar números ali no final também, para trocar somente a N-ésima palavra, tipo s/isso/aquilo/3 para trocar somente a terceira.

lampada-ideia

Nooosa, descobri a pólvora!
Eu já sabia “trocar palavras” de três maneiras diferentes!
Dominei a parada!
\o/

Ah… a inocência da ignorância.

Levou mais um bom tempo para eu me tocar que eu tinha visto apenas a pontinha do iceberg. Mais tarde, lendo com calma a man page, descobri a pólvora novamente: o Sed tinha outros comandos além do s///g! Como assim? Eu posso fazer outras coisas além de trocar palavras? Que massa!

Empolgado, fui testar alguns comandos. Não entendi a maioria, mas consegui brincar com o d e o q. Também aprendi que o Sed podia receber endereços, que diziam exatamente em quais linhas ele iria aplicar o comando. Se por exemplo eu quisesse fazer a minha já manjada troca de palavras apenas nas cinco primeiras linhas do arquivo, bastava fazer um sed “1,5 s/isso/aquilo/g”. Ou se em vez disso quisesse apagar estas mesmas linhas, bastava trocar o comando: sed “1,5 d”.

Como diria o Jovem Nerd, MINHA CABEÇA EXPLODIU!

cabeca-explodiu

Um mundo de possibilidades se abriu, de repente eu podia “editar um texto automaticamente”! Uau, eu não precisaria abrir o Vim para fazer edições rápidas, podia automatizar tudo!

Fui falar com o Fábio, meu guru de Sed, todo empolgado porque eu tinha descoberto aquilo sozinho sem perguntar pra ele. Fiquei chocado quando ele disse que nunca tinha usado aquilo.

Para.
Volta.
Processa.
Eu acabei de ensinar algo novo para o meu guru?

Deste ponto em diante, foi um caminho sem volta, o Sed entrou de sola em minha vida. Além de eu estar empolgadíssimo por ter descoberto (parte de) seu poder e suas possibilidades, foi minha primeira chance de ser o especialista em algum assunto lá dentro da Conectiva. Sabe como é, primeiro emprego, novato em absolutamente tudo, era uma chance de ouro que eu agarrei forte.

Eu desejei o posto do Fábio de “guru do Sed” dentro da Conectiva, e me cocei para conquistá-lo. Assinei a lista de discussão gringa (meu inglês ainda era sofrido), li a man page inúmeras vezes (demorei bastante pra entender tudo), baixei o FAQ e levei para casa. Durante várias noites eu fiz a leitura atenta do FAQ, item por item, executando cada comando até entender o que ele fazia e como fazia. E assim, numa imersão obstinada acompanhada de um superintensivo noturno, eu “vi a luz” do Sed.

Quem já brincou um pouco de Sed já pode adivinhar que por causa destes estudos um outro assunto (bem mais cabuloso) caiu no meu colo, e não tive como evitar :)

Com o aprendizado, o Sed já não me assustava mais. Comecei a utilizá-lo intensivamente nos meus scripts (o que consolidou e expandiu o aprendizado) e eu até já conseguia responder dúvidas de novatos lá na lista de discussão! Dentro da empresa, aos poucos fui mostrando que eu agora entendia daquele assunto.

Finalmente, em um dia de trabalho qualquer, eu lá scriptando na minha máquina, chega o Arnaldo e diz:

— E aí “sed man”!

lagrimas-olhos

————— ∞ —————

Bom relembrar…

Então, mas como o conhecimento somente dentro da cabeça não tem muita utilidade para o mundo, tentei fazer a minha parte para ajudar a divulgar o Sed por aqui.

Documentação em português era simplesmente inexistente.

Em 1999 criei a lista sed-br para servir de aprendizado e ponto de encontro dos usuários do programa. Aos poucos ela foi crescendo, crescendo, contando hoje com quase 800 inscritos. Muitas discussões densas já aconteceram por lá, sobre Sed e Expressões Regulares. Saudades da época de ouro da lista, quando grandes conhecedores do Sed também estavam por lá participando, como o Eliphas Theodoro e o Thobias Trevisan. Não que hoje esteja ruim, mas a patotinha se desfez.

Também em 1999 traduzi o GNU Sed para português e criei um cantinho para o Sed em minha recente “página da internet”, para concentrar informações sobre o programa, além de scripts que eu fazia. Essa área foi crescendo com o tempo, pois felizmente outras pessoas também começaram a traduzir documentos e escrever sobre o Sed. Hoje ela é um portal que centraliza as informações em português sobre o Sed.

Em 2000 escrevi o Sed HOWTO, um documento completo sobre o programa, para tentar explicar como o Sed funciona. O formato HOWTO hoje cheira mofo, mas na época era popular, tá? :) Baseado nas dúvidas que apareciam na lista de discussão, fui montando o documento. O objetivo era desmistificar o Sed para o usuário novato, mostrando como as coisas funcionam. Eu queria ter lido um desses quando estava aprendendo :)

No Sed também estão as origens do txt2tags, meu programa mais utilizado. A sua primeira versão era um script em Sed que se chamava txt2sgml.sed. Só fiz esse programa porque eu queria escrever o Sed HOWTO já mencionado, mas os HOWTOs eram escritos em SGML, uma linguagem tipo HTML, cheia de tags malas. Daí fiz o programinha em Sed para colocar essas tags automaticamente no meu texto. Viu como uma coisa puxa a outra? Se você gosta do txt2tags, agradeça ao Sed HOWTO :)

Em 2001 fiz o programa sedsed. Deu muito, mas muito trabalho e este é um dos programas que eu mais me orgulho em ter feito. Porém, é um ilustre desconhecido… Antes mesmo de escrever qualquer código, fiquei dias pensando em como eu poderia “depurar” (debug) um script em Sed. A missão era embutir outros comandos Sed no meio do script, que sem alterar em nada a lógica do script original, ainda mostraria na tela o comando atual sendo executado e o conteúdo dos buffers (pattern e hold space). O trabalho mental foi árduo, era uma cama de gato onde um comando que eu colocava para arrumar algo, estragava outra ponta. Muitos banhos quentes e protótipos depois, finalmente cheguei num modelo que conseguia depurar sem interferir. A maior emoção foi testar o mítico dc.sed (sim, a calculadora dc escrita em Sed) e ver o 4 + 4 virar 8 com a depuração ligada. Não tem preço.

4 + 4 = 8, sabia? :)

Em 2002 posso dizer que foi meu auge com o Sed. Além de ganhar a batuta de administrador do portal mundial do programa, vi meu nome no maior site nerd da época: o Slashdot. Mas o motivo foi meio frustrante para mim. Pra ver como as coisas são: o sedsed levou meses para ficar pronto e exigiu todo meu conhecimento de Sed, ao extremo. Mas o que me deixou “famoso” foi o trabalho de uma única noite: ter feito o jogo Sokoban em Sed. É aquele jogo simples de empurrar as caixinhas. Nada especial no jogo em si, mas como o Sed é um filtro de textos e não uma linguagem de programação, a dificuldade em fazer o jogo é que foi o grande chamariz. Algo como trocar um pneu de carro com um alicate. De bico. Dá pra fazer, mas dá muuuito trabalho :)

Jogo Sokoban em Sed!

Em 2002 também comecei a escrever um livro sobre Sed. Eu estava empolgado, devo ter feito mais da metade do livro, depois vários amigos da lista de discussão ajudaram revisando o texto. Mas não lembro porque agora, tive que parar a escrita por um tempo. Depois a chama nunca mais reacendeu… Frustrante :( Em 2005 liberei o PDF do livro, inacabado mesmo, para não perder todo o trabalho que foi feito. Mas escrever um livro de Sed ainda faz parte dos meus desejos, e espero poder fazer isso logo.

————— ∞ —————

Bem, mas essa volta toda é para dizer que o portal do Sed foi reformado :)

Assim como aconteceu com o portal do Vim, agora é a vez do Sed participar das comemorações de 10 anos do meu site. O portal entrou no formato novo, está mais limpo, confortável de ler e útil. Sem anúncios, sem menu sobrecarregado, sem frescurada que distrai.

No Vim você viu o formato novo dos artigos. Agora gostaria que você avaliasse o formato do portal, que lista todas as informações sobre um assunto. Tem também o Sed HOWTO, que além do formato novo ganhou uma atualização de conteúdo, indo para a versão 0.6.

Tá com tempo livre no final de semana? Sed nele! :)

— EOF —

Gostou desse texto? Aqui tem mais.