Introdução
sed (vem de stream editor) é uma ferramenta UNIX que lida com streams
de texto. Basicamente, ele recebe um input em forma de texto, faz uma
modificação e retorna, no output, o texto modificado. A modificação é feita
com base num pequeno script que se manda pra ele na linha de comando.
A idéia do programa é bastante simples (em vez de entrar num editor de texto e modificar manualmente, mandar um script que vai fazer isso automaticamente por você), mas suas aplicações são impressionantes. Por exemplo, parseamento de texto, substituição, conversão de um formato para outro, etc. Um exemplo de seu uso é o seguinte:
$ sed <arquivo.txt 's/old/new/g'
que substitui toda ocorrencia de old por new no arquivo arquivo.txt.
Quer algo mais complicado? Que tal:
$ sed <arquivo.txt -e :a -e 's/^.\{1,77\}$/ & /;ta'
Isso centraliza todo o texto de arquivo.txt no meio de uma coluna de 79
caracteres de largura, considerando os espaços que já haviam no começo de
cada linha. Veja:
$ cat arquivo.txt
Esse e um exemplo de arquivo contendo texto.
Aqui e outra linha, mais texto, bla bla bla.
Ah nao, esta chegando no final do arquivo!
Fim.
$ sed <arquivo.txt -e :a -e 's/^.\{1,77\}$/ & /;ta'
Esse e um exemplo de arquivo contendo texto.
Aqui e outra linha, mais texto, bla bla bla.
Ah nao, esta chegando no final do arquivo!
Fim.
Onde aprender
Tem uma ótima página em português sobre sed, com introdução e listas de artigos sobre essa ferramenta. E aqui está o link para o tutorial, tambem em português.
Um ótimo tutorial completão (em inglês) é o Sed - An Introduction and Tutorial.
Pra perguntas específicas, é bom ir ao THE SED FAQ.
Referência
Existem vários sed one-liners pela internet. Eles são listas de vários comandos prontos que resolvem problemas específicos (como numerar cada linha de um arquivo, remover espaços extras à direita do texto, e assim vai). O mais completo que achei foi esse.
Tambem tem uma cheatsheet, contendo tudo resumido sobre sed, mas
recomendo ler apenas quando já tiver uma noção do programa.
Exercícios
Através dos one-liners, dá pra fazer meio que uma lista de exercícios pra
treinar sed. Fiz isso pra mim, espero que seja útil.
Baixe o one-liner em formato .txt aqui e aplique o seguinte comando nele, para salvar um arquivo apenas com as perguntas:
$ sed <one-liners.txt >exercicios.txt -n 's|^[ ]*#.*$|&\n|p'
Conclusão
Usando a ferramenta sed, podemos fazer muitas coisas. Desde
emular comandos UNIX, alterações repetitivas em arquivos de texto,
remover todos os comentarios de um programa (por exemplo, em C/C++)
até jogos...!
Recomendo aprender a usar essa ferramenta, especialmente pra usar junto de outros programas através de pipes.