Comemoração de 10 anos do meu site AURELIO.NET
Parte 3
- 10 anos de sáite
- 10anos: Vim
- 10anos: Sed
- 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.

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!

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”!

————— ∞ —————
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.
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 :)
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! :)





Pingback: 10 anos de sáite | AURELIO.NET
Pingback: 10anos: Expressões Regulares | AURELIO.NET
Pingback: 10anos: Vim | AURELIO.NET
E pensar que eu era o único que lia e relia até entender, sempre achei que eu era meio lerdo ou burro, coisa do gênero, mas não. Fiquei feliz ao ler esse post.
Parabéns, pela segunda vez xD
Abraço Verde.
As man pages não foram escritas por humanos, nem para humanos.
Aí fica difícil :)
Eu ainda imprimi o livro inacabado de SED e passei para os amigos quando terminei. ;D
Parabéns.
Sempre quis aprender SED, mas estou sempre com pouco tempo pra aprender coisas novas.
Vou ver se separo um pouco do meu tempo pra isso.
Abraço!
Nossa eu li suas páginas de SED diversas vezes, cheguei a dormir em cima do teclado. Mas me ajudou muito.
Abraços e continue com o excelente trabalho.
Só uma coisa eu não entendi: se o sed está traduzido, porque a man page da minha versão 4.1.5 aparece em inglês???
Eu traduzi as mensagens do programa, que é tudo aquilo que ele “diz” pra você quando vai tentar usá-lo, como a tela de ajuda e as mensagens de erro.
Eu tou aqui tentando lembrar se traduzi a man page também, eu acho que sim, mas não achei nenhum arquivo aqui. Estranho…
Epa! Texto do leitor! Foi no meio dessa parte da história que eu conheci o Aurélio.
Um grande marco da História Verde que ele não mencionou (deixou para depois) foi a criação e publicação do “Livrinho Verde” sobre Expressões Regulares (hoje transformado no Livro do Piazinho), consequência do seu envolvimento com o sed. Por algum motivo, tenho sempre muito clara a lembrança do dia em que eu acordei frustrado com os estudos autodidatas dos dias anteriores e, ainda na cama, determinei que iria à livraria procurar um livro que me ajudasse naquele assunto cabeludo. Coisa inédita pra mim: sair de casa de manhã, acho que num sábado, só pra comprar um livro. Eu não saía de manhã nem pra comprar pão. Foi fácil escolher o livro. Só tinha aquele! Mas nem foi por falta de opção que eu o comprei. Dei uma folheada ali na livraria e vi que ele era muito diferente: livro de informática costuma ser muito, muito ruim, mas o autor daquele livro realmente tinha talento e se esforçava para explicar as coisas. A leitura me agarrou, eu já queria puxar uma cadeira, mas daí eu me dirigi ao caixa e fui ler em casa.
Li, aprendi, e não doeu nada.
No fim do livro, havia um convite para participar da lista de discussão do sed. Hesitei. O assunto era muito difícil, aquilo não era meu lugar. Mas o convite me pareceu sincero, então eu fui lá participar. Aprendi mais ainda e conheci o Aurélio.
Muito prazer em conhecê-lo, Aurélio!
O prazer é meu amigo LES!
Legal saber a tua história. Já faz muitos anos mesmo que nos conhecemos, você sempre ajudando, seja no Sed, nas expressões regulares, nas Funções ZZ, no CODARE… Esqueci algum? :)
Ei, talvez você seja o maior colaborador de todos os tempos! Preciso um dia fazer um apanhado disso.
VALEU MESMO!
Mermão. E eu achava que era Nerd antes de te conhecer.
Bem, com a tua idade e nem sabia o que era computador ainda.
Então você tem vários anos de dianteira :)
Quero ver hein?
Puxa vida, bom reler sua história, inspira a minha, =D. Vejo que ainda tenho muito a aprender mas estou indo no caminho certo. Parabéns pelos portais e ajuda.
Não tente chegar logo, pois o caminho é a melhor parte! :)
Grande Aurélio,
No idos de 2002 tive que fazer uma migração cabulosa de um sistema acadêmico de 10 anos, cujos dados estavam em DBASE e iam pro Postgres do SAGU (Solis/Univates) e a salvação foi o SED e todo o material do seu site. Valeu!
Fora êne outras coisas que salvou com ER, Shell… é sempre um prazer ler seus livros, textos técnicos e posts no blog. Do caralho demais…
Vida longa pra ti e aos teus filhos meu nobre!
Valeu PH! Fico feliz em saber que o Sed salvou o dia mais uma vez, êta bichinho útil, sô!
Continua por aqui que eu continuo escrevendo, combinado? :)
Combinado! Vamo junto! ;o)
Olá Aurélio,
Meus parabéns por todas as contribuições ao mundo opensource. Sou mais um dos que fazem muito uso de toda essa documentação que você disponibiliza pra gente. Possuo aquele Guia de Consulta Rápida de Expressões Regulares da Novatec e faço bom uso dele. Hehehe!
Estou aqui brincando com o seu sokoban em sed. :D
[]‘s
Opa, mais uns anos e esse guia pode virar raridade, cuida bem do teu :)
Quanto ao Sokoban, bem, digamos que jogar ele é a parte mais chata da brincadeira ;)
Grande Aurélio,
Antes de mais nada, parabéns pelos 10 anos de site e vida longa!
É muito bom e engraçado ler seus relatos, me faz lembrar a época que comecei a trabalhar em provedores, em meados de 1995. Na época não conhecia sed, mas usava pequemos programas em Perl para fazer substituições em arquivos, era algo que só sabia fazer no automático, simplesmente pegava uma receita e outra e ia testando até obter o resultado esperado. Depois de muito tempo é que conheci o sed, e só sabia o básico também. Bons tempos aquele e seus relatos serviram como uma viagem no tempo.
Mais uma vez parabéns e deixo aqui um grande abraço
Do amigo
Christiano
Christiano, quanto tempo! Bom saber que você está por aqui ainda, amigo. Isso me faz lembrar que tenho uns 4 posts atrasados pra ler no teu blog, vou fazer isso hoje.
Pois é, também já brinquei disso de “fazer no automático” e ver no que dava hehe Nóis num sabe u qui faiz nem pruquê faiz, mais faiz :)
Abraço!
Ensinar ou ser reconhecido com mestre pelo próprio mestre, é realmente mastercard.
Nunca cheguei ao nível de um guru, mas o que aprendi com com você e o thobias, fez com que eu fosse conhecido, aqui na empresa, com experd em sed.
Obrigado
Dá-lhe Jonatas! Então você já viu a luz do Sed, que beleza. O Thobias anda meio (bastante) sumido, é uma pena, pois ele fazia muitas mágicas bacanas com nosso amigo Sed…
Me senti um velho agora:
“O formato HOWTO hoje cheira mofo…”
Eu até hoje utilizo o formato é acho muito interessante como guia de referência [quase] completo para alguma coisa. :)
Bem, cada um cada um, né?
Eu olho um HOWTO e penso: isso é tão anos 90… :)
prompt> cat arquivo.txt
No início do início, era um nada.
No segundo dia, fez um rascunho à lápis.
No terceiro dia, apagou e começou tudo de novo.
No quarto dia, ficou com preguiça, então falou:
– Sexta-feira eu continuo, se não estiver cansado…
E no fim, nada.
Fala Verde!
Cara, acho que casar e mudar de lugar te fez um bem do carvalho! :D
Legal essa reformulação de ares, coisas e afins… e o saudosismo… ah… há dias que a lenta conexão de 2400 me leva pra tosca tela modo-texto da BBS que eu usava por aqui!
Abração!
Valeu amigo Donelli!
Realmente a vida nova faz a gente refletir sobre tudo, abre novos caminhos. Eu confesso que ainda estou tentando achar o caminho a seguir daqui adiante, mas isso não me impede de olhar para trás e relembrar, né? :)