#!/bin/sed -fn

/^Bem-vind[oa]/!{

  /E/s/ta é a /minha pá/g;/i/n;/a/ s/o//;b re; /o Se/d

  sed primeiro, dep;/oi/s o resto ;P

}
$!N

Seja bem-vindo(a) ao portal do Sed. Ele é um editor de textos? É uma linguagem de programação? É um comando do UNIX? É um filtro? Na verdade, é isso tudo e mais um pouco :)

Acompanhe aqui vários artigos sobre o Sed, escritos em português.

Lá no meu blog eu contei a minha história com o Sed, que começou em 1997 e mudou minha vida, culminando com a escrita de um livro sobre Expressões Regulares.

Lista de discussão

Você ainda não assina a sed-br? Demorou. Inscreva-se já para conversar com outros coleguinhas sobre Sed e Expressões Regulares.

Your book is on the table? So try this one for advanced topics in english.

Documentação

Em português

Alfabeto do sed por Aurelio Marinho Jargas

Uma cola rápida de todos os comandos do sed, em ordem alfabética.

Sed HOWTO por Aurelio Marinho Jargas

Este documento se propõe a ser um tutorial e um guia de consulta de Sed ao mesmo tempo. Ele apresenta o Sed aos poucos, explicando seu funcionamento, mas também conta com dicas avançadas. Este guia é exclusivo de Sed, as Expressões Regulares não são abordadas.

Dominando o Sed por Aurelio Marinho Jargas

Um livro inacabado sobre Sed, disponível gratuitamente em PDF. Ele cobre instalação, todos os detalhes dos endereços, como lidar com arquivos, quebras de linha, maiúsculas e minúsculas, contando com vários exemplos didáticos com que podem ser testados em sua máquina.

Sed 1liners por Ricardo Sartori

Comandos Sed de apenas 1 linha, prontos para copiar e colar.

Só Sed por Thobias Salazar Trevisan

Rápido e rasteiro, exemplos do Sed em ação resolvendo problemas comuns.

Usando o sed para contar por Thobias Salazar Trevisan

Explicação didática de como incrementar números (e letras) usando o Sed.

Lookup Tables & Incrementando em sed por Thobias Salazar Trevisan

Demonstração do uso da técnica de Lookup Tables em Sed.

Branches no sed por Thobias Salazar Trevisan

Explicação dos comandos de branch (pulo, tipo GOTO) em Sed.

Expressões Regulares por Aurelio Marinho Jargas

Vários documentos e um livro inteiro para você entender que ^#!.*$ não é um xingamento.

Dicas soltas de Sed por Aurelio Marinho Jargas

Diquinhas soltas, rápidas, para ler e esquecer.

Em inglês

Portal mundial do Sed por Aurelio Marinho Jargas

Este é o portal mundial do Sed, com dezenas de links para programas, artigos, sites e até jogos! Prepare-se para gastar MUITAS horas lendo todo o conteúdo.

Sed - An Introduction and Tutorial

Um guia bem completo, cheio de exemplos, que explica em detalhes o funcionamento do Sed.

Depurador (debug)

O sedsed é um depurador (debugger) para scripts Sed escrito em Python. Sempre que seu script crescer e ficar confuso, ou estiver usando o HOLD SPACE, esse depurador salvará a sua vida lhe mostrando o conteúdo dos buffers internos do Sed enquanto o script é executado.

Além disso o mesmo programa também serve como embelezador de código ("indentation") e também converte scripts Sed para páginas HTML coloridas. Veja por exemplo como ficou o SedSokoban em HTML.

Programas / Scripts

Aqui estão alguns programinhas em Sed que eu fiz. Alguns estão com o nome e comentários em inglês porque eu os postei em listas gringas e não tive tempo/saco de traduzir. Se você tem, traduza e me mande que eu coloco aqui :D

sokoban.sed
O clássico jogo de empurrar caixas, Sokoban, inteiramente escrito em Sed. O jogo está bem completo, com 90 níveis, cores, comandos, detecção de vitória e movimentação do personagem usando as setinhas do teclado.

arkanoid.sed
O clássico jogo Arkanoid (Breakout) inteiramente escrito em Sed. O jogo está bem completo, com cores, explosões cadenciadas, possibilidade de segurar a bolinha no bastão e tem 3 vidas.

justify.sed
Justificador de texto.

mail-iso2txt.sed
Traduz os =20 e outros aliens que às vezes aparecem em mensagens de e-mail.

wrap-forced.sed
Quebra as linhas exatamente na coluna especificada, sem se importar com o contexto.

yahoogroups-kill-sig.sed
Apaga a propaganda do Yahoo! das mensagens de e-mail (TXT ou HTML).

escape.sed
Converte os símbolos [^A-Za-z0-9_] para hexadecimais, usando a notação de internet como %20.

unescape.sed
Desconverte o que o escape.sed converteu.

txt2sgml-sed
Um conversor simples de arquivos texto puro (TXT) para SGML. Este é um script bem antigo, que deu origem ao txt2tags.

Mensagens de erro

Eu sou o tradutor do GNU Sed para o português. Isso inclui todas as mensagens que o programa mostra na tela durante o uso, como a tela de ajuda (--help) e as mensagens de erro.

As mensagens originais são bem curtas e difíceis de entender, eu tentei torná-las mais amigáveis, colocando dicas adicionais sobre a possível causa dos problemas. Veja alguns exemplos:

unterminated `s' command
Comando `s' inacabado (s/// - faltou delimitador)
unknown option to `s'
Opção desconhecida para o comando `s' (s///?)
Invalid content of \\{\\}
Conteúdo inválido no \\{\\} (permitidos números e vírgula)

Se o seu Sed está em inglês e você está tendo problemas para decifrar alguma mensagem, dê uma olhada no arquivo de tradução e procure pela frase em questão, pois a tradução pode te ajudar.

GNU Sed 3.02.80

Nem lembro mais porque eu guardava essa versão específica do Sed, mas tem algo a ver com a troca de mantenedor do programa. A versão seguinte a essa contava com firulas inúteis, que eu não gostei. Hoje isso já não faz mais diferença na minha vida (hehe), então que fique aqui para fins meramente arqueológicos:

Palestra sobre Sed

Nos dias 27 e 28 de outubro de 1999 (é, faz tempo, tou véio), eu fiz uma palestra sobre Sed e Expressões Regulares para os funcionários da Conectiva.

A palestra foi gravada e aqui está um resumão dela, divido em dois arquivos. Provavelmente quase nada é aproveitável desses arquivos, visto que não é a palestra corrida e sim apenas o supra-sumo de cada tópico, mas se servir pra alguém já vale.

É uma pena que eu cortei demais. As frases ficaram grudadas e há poucos trechos com as falas do pessoal que estava assistindo. Dá pra identificar as vozes do Acme e do Marcelo Tosatti, em trechos curtos.

Nas tabelas seguintes, há uma descrição breve do assunto de cada trecho. Acompanhe os bips para saber quando passou de um trecho para o outro.

Obrigado ao amigo Fernando Rodrigues por ter convertido para MP3 os arquivos originais que estavam em Real Audio.

Segue uma descrição dos tópicos abordados em cada arquivo:

27 de Outubro de 1999, 13:09 minutos
# assunto descrição
1 nome func s+ed, fluxo, funcionamento, STDIN/STDOUT, regras
2 util substituição de padrões
3 chamada cat A |sed; sed 's///' A > A2
4 cp tática cp;sed;rm - permissões, ligações e atributos
5 delimitador barras, tem que ser 3
6 s///g modificador g: global, + de 1 ocorrência
7 s/\/// escapar a / com um \ para não confundir com o delim
8 s@@@ s/$velho/$novo/, barra é padrão
9 " ou ' bash. sempre use '' ou "" ao redor
10 $aux aux=/1998 ; echo sed s,$aux,lala,
11 echo sed faz as substituições normais do bash
12 -n s///p geralmente com -n usa-se o p
13 dica ?
14 s/ ; s/ vários comandos seguidos
15 dica vantagem s/ ; s/ por sed|sed
16 aplicativos grep, cat, rev, etc
17 = = mostra o número da linha
18 N N grude a próxima linha com a minha atual
20 de Outubro de 1999, 14:39 minutos
# assunto descrição
1 âncoras ^$
2 . qualquer caractere
3 classe char [], nada é interpretado
4 intervalo 0-9 = 0123456789, tabela ASCII, A-z != A-Za-z
5 chk domínio ^[A-Za-z0-9.]*, zero uma ou mais vezes
6 .* tudo ou nada, curinga
7 o * guloso http://www.lala.com.br:80 — ^.*:
8 \+ motivos históricos, escapado para ser especial
9 \? .html* casa .htmllllll, então faz .html\?
10 classe neg 1º caractere deve ser ^, ! é negação no sed
11 tags html abordagem inversa: o que NÃO pode ter, <[^>]*>
12 técnica nega pois ele é o delimitador
13 é fácil encarar a ER como pequenas partes, ler um a um
14 \| devem ser escapados os (), código C
15 aninhando parênteses dentro de parênteses
16 buffer ()s, conta da esquerda para a direita, até 9, \1
17 dica sem escapar, depois sai escapando tudo
18 cut trocar a ordem de 2 campos

Divirta-se!

Sed Superman

Evolução das línguas