Differences

This shows you the differences between two versions of the page.

Link to this comparison view

o_sed_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Introdução ======
  
 +
 +Este texto se propõe a ser uma maneira fácil das pessoas acharem aquele sed perdido para resolver seu problema, ou seja, aqui vamos direto ao ponto, sem frescura ou enrolação.
 +
 +Se você está procurando um texto que explique o SED, visite estes links:
 +
 +  - http://​sed.sourceforge.net/​ - Página $HOME do sed
 +  - http://​aurelio.net/​sed/​sed-HOWTO/​ - sed HOWTO em pt_BR
 +  - http://​aurelio.net/​sed/​ - página com links e programas em sed (pt_BR)
 +  - http://​br.groups.yahoo.com/​group/​sed-br/​ - página da lista sed-br
 +  - http://​sed.sourceforge.net/​sedfaq.html - The sed FAQ (english)
 +  - http://​www.math.fu-berlin.de/​user/​guckes/​sed/​ - página da lista sed users (vários links e docs - english)
 +  - http://​aurelio.net/​er/​ - expressões regulares (pt_BR)
 +  - http://​www.douglas.wiki.br/​Downloads/​docs/​DominandoSed.pdf (pt_BR)
 +
 +====== Descrição do Sed ======
 +
 +O Sed é um editor de textos não interativo.
 +
 +Ele pode editar automaticamente,​ sem interação do usuário, vários arquivos seguindo um conjunto de regras especificadas.
 +
 +====== O que significa a palavra Sed ======
 +
 +Vem do inglês "​Stream EDitor",​ ou seja, editor de fluxos (de texto).
 +
 +====== Como saber se devo usar o Sed ======
 +
 +Sendo um editor de textos não interativo, o Sed é excelente para desempenhar algumas tarefas, mas em outras seu uso não é aconselhado.
 +
 +====== Quando usar o Sed ======
 +
 +A característica principal do Sed é poder editar arquivos automaticamente.
 +
 +Então sempre que você precisar fazer alterações sistemáticas em vários arquivos, o Sed é uma solução eficaz.
 +
 +Por exemplo, você tem um diretório cheio de relatórios de vendas, e descobriu que por um erro na geração, todas as datas saíram erradas, com o ano de 1999 onde era para ser 2000. Num editor de textos normal, você tem que abrir os relatórios um por um e alterar o ano em todas as ocorrências.
 +
 +Certo, isso não é tão complexo se o editor de textos possuir uma ferramenta de procura e troca, também chamado de substituição.
 +
 +Mas então suponhamos que o erro da data não seja o ano, e sim o formato, tendo saído como mm/dd/aaaa quando deveria ser dd/mm/aaaa. Aqui não é uma substituição e sim uma troca de lugares, e uma ferramenta simples de procura e troca não poderá ajudar.
 +
 +Esse é um caso típico onde o Sed mostra seu poder: alterações complexas em vários arquivos.
 +
 +Utilizando o Sed, a solução para este problema (que veremos adiante) é até simples, bastando definir uma série de regras de procura e troca, e o programa se encarregará de executá-las e arrumar os relatórios.
 +
 +====== Quando não usar o Sed ======
 +
 +Nenhuma ferramenta é ideal para todas as tarefas, e o Sed não é uma exceção à regra.
 +
 +
 +====== Edição genérica de textos ======
 +
 +Ele não é prático para ser utilizado como editor de textos de uso genérico.
 +
 +Para escrever textos, ou alterar coisas simples, é mais rápido e fácil abrir um editor de textos interativo como o vi ou o emacs e fazer a alteração "na mão".
 +
 +====== Programação avançada ======
 +
 +O Sed não é uma linguagem de programação completa, pois não possui variáveis, funções matemáticas,​ interação com o sistema operacional,​ entre outras limitações. Mas bem, ele é um manipulador de texto e não uma linguagem de uso geral.
 +
 +Algumas estruturas complexas podem ser simuladas com alguma técnica, mas se o seu programa em Sed começou a inchar muito, é aconselhável reescrevê-lo numa linguagem com mais recursos, como o perl.
 +
 +====== Como o Sed ele funciona ======
 +
 +O Sed funciona como um filtro, por onde você passa um texto X e ele joga na saída um texto Y.
 +
 +O texto X virou Y seguindo algumas regrinhas que você determinou.
 +
 +Pense no Sed como um processador de alimentos, dependendo da lâmina utilizada, a batata sai cortada de uma maneira diferente :)
 +
 +  * o Sed funciona como um filtro, ou conversor.
 +  * o Sed é orientado a linha, de cima para baixo, da esquerda para a direita.
 +  * o Sed lê uma linha da entrada padrão (STDIN) ou de um arquivo especificado,​ aplica os comandos de edição e mostra o resultado na saída padrão (STDOUT). vai para a próxima linha e repete o processo.
 +  * o Sed aceita endereços para os comandos.
 +  * o Sed aplica os comandos para todas as linhas caso um endereço não seja especificado.
 +  * o Sed faz uso intensivo de expressões regulares.
 +  * o Sed é macho :)
 +
 +====== Sua sintaxe ======
 +
 +
 +A sintaxe genérica de um comando Sed é:
 +
 +sed [opções] regras [arquivo]
 +
 +Sendo que regras tem a forma genérica de:
 +
 +[endereço1 [, endereço2]] comando [argumento]
 +
 +====== Alfabeto do Sed ======
 +
 +
 +
 +^ Caracter ​   ^ Descrição ​ ^ O que ele Faz  ^
 +|a    |append ​       |anexa um texto após o [BUFFER]|
 +|b    |branch ​       |pula até uma marcação|
 +|c    |change ​       |troca o [BUFFER] por um texto|
 +|d    |delete ​       |apaga o [BUFFER]|
 +|D    |delete ​       |apaga a primeira linha do [BUFFER]|
 +|e    |execute ​      ​|executa um comando do sistema #GNU-sed|
 +|F    |filename ​     |imprime o nome do aquivo atual #GNU-sed|
 +|g    |get           ​|copia texto do [BUFFER] pro [RESERVA] (sobrescreve)|
 +|G    |get           ​|copia texto do [BUFFER] pro [RESERVA] (anexa)|
 +|h    |hold          |copia texto do [RESERVA] pro [BUFFER] (sobrescreve)|
 +|H    |hold          |copia texto do [RESERVA] pro [BUFFER] (anexa)|
 +|i    |insert ​       |insere um texto antes do [BUFFER]|
 +|l    |list          |imprime o [BUFFER] mostrando caracteres invisíveis|
 +|n    |next          |carrega a próxima linha no [BUFFER]|
 +|N    |next          |anexa a próxima linha no [BUFFER]|
 +|p    |print ​        ​|imprime o conteúdo do [BUFFER]|
 +|P    |print ​        ​|imprime a primeira linha do [BUFFER]|
 +|q    |quit          |imprime o [BUFFER] e finaliza o Sed|
 +|Q    |quit          |descarta o [BUFFER] e finaliza o Sed #GNU-sed|
 +|r    |read          |mostra conteúdo do arquivo após o [BUFFER]|
 +|R    |read          |mostra uma linha do arquivo após o [BUFFER] #GNU-sed|
 +|s    |substitute ​   |substitui um trecho de texto por outro|
 +|t    |tee           |pula na marcação, se um <​nowiki>​s///</​nowiki>​ funcionou|
 +|T    |tee           |pula na marcação, se nenhum <​nowiki>​s///</​nowiki>​ funcionou #GNU-sed|
 +|v    |version ​      ​|aborta se a versão do sed for incompatível #GNU-sed|
 +|w    |write ​        ​|grava o [BUFFER] num arquivo|
 +|W    |write ​        ​|grava a 1ª linha do [BUFFER] num arquivo #GNU-sed|
 +|x    |eXchange ​     |troca os conteúdos do [BUFFER] e [RESERVA]|
 +|y    |?             ​|troca caracteres|
 +|z    |zap           ​|limpa o conteúdo do [BUFFER] #GNU-sed|
 +
 +**Nota:**
 +  - [BUFFER] ​ - Buffer padrão do sed (pattern space)
 +  - [RESERVA] - Buffer reserva do sed (hold space)
 +
 +
 +====== Descrição de todos os comandos ======
 +
 +Podemos obter o manual muito bem documentado em
 +<sxh bash>
 +man sed
 +</​sxh>​
 +
 +Podemos ver tambem um help
 +<sxh bash>
 +pinfo sed
 +</​sxh>​
 +
 +Ou num resumo rápido:
 +
 +^ Legenda: ^    Descrição ​    ^
 +|[ARQUIVO] ​      ​|arquivo ou fluxo de texto (via pipe) original a ser modificado|
 +|[TEXTO] ​        ​|trecho de texto. pode ser uma palavra, uma linha, várias separadas por \n, ou mesmo um vazio.|
 +|[PADRÃO] ​       |[TEXTO] contido no ESPAÇO PADRÃO|
 +|=  |imprime o número da linha atual do [ARQUIVO]|
 +|#  |inicia um comentário|
 +|!  |inverte a lógica do comando|
 +|;  |separador de comandos|
 +|,  |separador de faixas de endereço|
 +|{  |início de bloco de comandos|
 +|}  |fim de bloco de comandos|
 +|s  |substitui um trecho de texto por outro|
 +|y  |traduz um caractere por outro|
 +|i  |insere um texto antes da linha atual|
 +|c  |troca a linha atual por um texto|
 +|a  |anexa um texto após a linha atual|
 +|g  |restaura o [TEXTO] contido no ESPAÇO RESERVA (sobrescrevendo)|
 +|G  |restaura o [TEXTO] contido no ESPAÇO RESERVA (anexando)|
 +|h  |guarda o [PADRÃO] no ESPAÇO RESERVA (sobrescrevendo)|
 +|H  |guarda o [PADRÃO] no ESPAÇO RESERVA (anexando)|
 +|x  |troca os conteúdos dos ESPAÇO PADRÃO e RESERVA|
 +|p  |imprime o [PADRÃO]|
 +|P  |imprime a primeira linha do [PADRÃO]|
 +|l  |imprime o [PADRÃO] mostrando caracteres brancos|
 +|r  |inclui conteúdo de um arquivo antes da linha atual|
 +|w  |grava o [PADRÃO] num arquivo|
 +|:  |define uma marcação|
 +|b  |pula até uma marcação|
 +|t  |pula até uma marcação, se o último <​nowiki>​s///</​nowiki>​ funcionou (condicional)|
 +|d  |apaga o [PADRÃO]|
 +|D  |apaga a primeira linha do [PADRÃO]|
 +|n  |vai para a próxima linha|
 +|N  |anexa a próxima linha no [PADRÃO]|
 +|q  |finaliza o Sed imediatamente|
 +
 +====== Lista de todos os comandos por categoria ======
 +
 +^ Legenda ^ Caracter ^
 +|informações | =|
 +|marcadores |:|
 +|comentários |#|
 +|comandos de edição |s i c a y|
 +|comandos de registradores |g G h H x|
 +|comandos de impressão |p P l|
 +|comandos de arquivo |r w|
 +|modificadores |g i !|
 +|separadores |; -e \n|
 +|controle de fluxo |b t d D n N q|
 +|endereço |<​nowiki>//</​nowiki>​ ,|
 +|limitadores |{} \(\)|
 +|registradores dinâmicos |\1 \2 ... \9|
 +
 +
 +====== Texto padrão ======
 +
 +Em todos os exemplos vamos procurar manter sempre o mesmo texto para facilitar a compreensão das perguntas e respostas. Esperamos deste modo deixar o só sed mais amigável e que você ache a sua pergunta de maneira fácil e agil. =8)
 +
 +Dica: 
 +<sxh bash>
 +Leia o arquivo de entrada com calma. Analise-o, respire e releia-o.
 +</​sxh>​
 +
 +Assim ficará mais fácil para você entender os exemplos e as mudanças ocorridas após a execução de cada sed.
 +
 +Vamos usar o seguinte arquivo para todos os exemplos
 +<sxh bash>
 +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.
 +</​sxh>​
 +
 +
 +====== Brincando com linhas ======
 +
 +**Imprimir somente as linhas com uma determinada string**
 +
 +O comando
 +<sxh bash>
 +sed -n '/​dia/​p'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed -n '/​dia/​p'​ arquivo.txt ​
 +   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:
 +</​sxh>​
 +
 +
 +**Imprimir somente a primeira ocorrência da linha com determinada string**
 +
 +O comando
 +<sxh bash>
 +sed -n '/​dia/​{p;​q;​}'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed -n '/​dia/​{p;​q;​}'​ arquivo.txt ​
 +   No segundo dia, fez um rascunho à lápis.
 +</​sxh>​
 +
 +**Imprimir a última ocorrência da linha com determinada string**
 +
 +O comando
 +<sxh bash>
 +sed -n '/​dia/​h;​${x;​p;​}'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed -n '/​dia/​h;​${x;​p;​}'​ arquivo.txt ​
 +     No quarto dia, ficou com preguiça, então falou:
 +</​sxh>​
 +
 +**Imprimir da primeira ocorrência da string até o final**
 +
 +O comando
 +<sxh bash>
 +sed '/​dia/,​$!d'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '/​dia/,​$!d'​ arquivo.txt ​
 +   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.
 +</​sxh>​
 +
 +**Imprimir da última ocorrência da string até o final**
 +
 +O comando
 +<sxh bash>
 +sed -n '/​dia/​{h;​${x;​p;​};​d;​};​H;​${x;​p;​}'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed -n '/​dia/​{h;​${x;​p;​};​d;​};​H;​${x;​p;​}'​ arquivo.txt ​    
 +     No quarto dia, ficou com preguiça, então falou:
 +  ​
 +  - Sexta-feira eu continuo, se não estiver cansado...
 +  ​
 +    E no fim, nada.
 +</​sxh>​
 +
 +**Apagar as linhas com uma determinada string**
 +
 +O comando
 +<sxh bash>
 +sed '/​dia/​d'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '/​dia/​d'​ arquivo.txt ​
 +  No início do início, era um nada.
 +  ​
 +  - Sexta-feira eu continuo, se não estiver cansado...
 +  ​
 +    E no fim, nada.
 +</​sxh>​
 +
 +**Apagar apenas a primeira linha com determinada string I**
 +
 +O comando
 +<sxh bash>
 +sed '/​dia/​{H;​x;/​^\n/​d;​g;​}'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '/​dia/​{H;​x;/​^\n/​d;​g;​}'​ arquivo.txt
 +  No início do início, era um nada.
 +    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.
 +</​sxh>​
 +
 +**Apagar apenas a primeira linha com determinada string II**
 +
 +O comando ​
 +<sxh bash>
 +sed -n '/​dia/​{:​a;​n;​p;​ba;​};​p'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed -n '/​dia/​{:​a;​n;​p;​ba;​};​p'​ arquivo.txt
 +  No início do início, era um nada.
 +    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.
 +</​sxh>​
 +
 +**Adicionar texto no início da linha**
 +
 +O comando
 +
 +<sxh bash>
 +sed '​s/​^/​texto incluido/'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​s/​^/​texto incluido/'​ arquivo.txt ​
 +texto incluido ​ No início do início, era um nada.
 +texto incluido ​  No segundo dia, fez um rascunho à lápis.
 +texto incluido ​   No terceiro dia, apagou e começou tudo de novo.
 +texto incluido ​    No quarto dia, ficou com preguiça, então falou:
 +texto incluido  ​
 +texto incluido ​ - Sexta-feira eu continuo, se não estiver cansado...
 +texto incluido  ​
 +texto incluido ​   E no fim, nada.
 +</​sxh>​
 +
 +**Adicionar texto no final da linha**
 +
 +O comando
 +<sxh bash>
 +sed '​s/​$/​texto incluido/'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​s/​$/​texto incluido/'​ arquivo.txt ​
 +  No início do início, era um nada.texto incluido
 +   No segundo dia, fez um rascunho à lápis.texto incluido
 +    No terceiro dia, apagou e começou tudo de novo.texto incluido
 +     No quarto dia, ficou com preguiça, então falou:texto incluido
 +  texto incluido
 +  - Sexta-feira eu continuo, se não estiver cansado...texto incluido
 +  texto incluido
 +    E no fim, nada.texto incluido
 +</​sxh>​
 +
 +**Retirar linhas em branco**
 +
 +O comando
 +<sxh bash>
 +sed '/​^$/​d'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '/​^$/​d'​ 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.
 +</​sxh>​
 +
 +**Incluir texto no início da linha N**
 +
 +**OBS:** troque o número 1 para a linha que você quiser
 +
 +O comando
 +<sxh bash>
 +sed '​1s/​^/​começo do arquivo/'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​1s/​^/​começo do arquivo/'​ arquivo.txt ​
 +começo do arquivo ​ 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.
 +</​sxh>​
 +
 +**Incluir texto no final da linha N**
 +
 +**OBS:** troque o número 1 para a linha que você quiser
 +
 +O comando
 +<sxh bash>
 +sed '​1s/​$/​final da linha/'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​1s/​$/​final da linha/'​ arquivo.txt ​
 +  No início do início, era um nada.final da linha
 +   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.
 +</​sxh>​
 +
 +**Incluir texto na linha N apagando o conteúdo existente**
 +
 +**OBS:** troque o número 1 para a linha que você quiser
 +
 +O comando
 +<sxh bash>
 +sed '​1s/​.*/​início do arquivo/'​
 +</​sxh>​
 +
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​1s/​.*/​início do arquivo/'​ arquivo.txt ​
 +início do arquivo
 +   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.
 +</​sxh>​
 +
 +**Incluir texto antes da linha N**
 +
 +**OBS:** troque o número 1 para a linha que você quiser
 +
 +O comando
 +<sxh bash>
 +sed -e '​1i\'​ -e '​começo do arquivo'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed -e '​1i\'​ -e '​começo do arquivo'​ arquivo.txt ​
 +começo do arquivo
 +  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.
 +</​sxh>​
 +
 +
 +**Incluir linha após a última**
 +
 +O comando
 +<sxh bash>
 +sed -e '​$a\'​ -e 'linha final'
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed -e '​$a\'​ -e 'linha final' 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.
 +linha final
 +</​sxh>​
 +
 +** Imprimir somente a linha N **
 +
 +**OBS:** troque o número 2 para a linha que você quiser
 +
 +O comando
 +<sxh bash>
 +sed '​2!d'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​2!d'​ arquivo.txt ​
 +   No segundo dia, fez um rascunho à lápis.
 +</​sxh>​
 +
 +**Retirar a linha N**
 +
 +**OBS:** troque o número 2 pela linha que você quiser
 +
 +O comando
 +<sxh bash>
 +sed '​2d'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​2d'​ arquivo.txt ​
 +  No início do início, era um nada.
 +    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.
 +</​sxh>​
 +
 +**Extrair um trecho de uma linha**
 +
 +**OBS:** O mesmo que cut -d, -f2
 +
 +O comando
 +<sxh bash>
 +sed '​s/​^[^,​]*,​\([^,​]\+\),​\?​.*/​\1/'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​s/​^[^,​]*,​\([^,​]\+\),​\?​.*/​\1/'​ arquivo.txt
 + era um nada.
 + fez um rascunho à lápis.
 + ​apagou e começou tudo de novo.
 + ficou com preguiça
 +
 + se não estiver cansado...
 +
 + nada.
 +</​sxh>​
 +
 +**Retirar espaços em branco repetidos**
 +
 +O comando
 +<sxh bash>
 +sed 's/[ ]\+/ /g'
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed 's/[ ]\+/ /g' 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.
 +</​sxh>​
 +
 +**Retirar espaços em branco no início da linha**
 +
 +O comando
 +<sxh bash>
 +sed 's/^ \+//'
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed 's/^ \+//' 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.
 +</​sxh>​
 +
 +**Apagar uma string do início da linha**
 +
 +O comando
 +<sxh bash>
 +sed '​s/​^No//'​ 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.
 +</​sxh>​
 +
 +Aqui ele não mudou nada pois todas as nossas linhas tem um espaço no início e não um No :D
 +
 +**Apagar do início da linha até uma string**
 +
 +O comando
 +<sxh bash>
 +sed '​s/​^.*dia//'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​s/​^.*dia//'​ arquivo.txt ​
 +  No início do início, era um nada.
 +, fez um rascunho à lápis.
 +, apagou e começou tudo de novo.
 +, ficou com preguiça, então falou:
 +
 +  - Sexta-feira eu continuo, se não estiver cansado...
 +
 +    E no fim, nada.
 +</​sxh>​
 +
 +**Apagar de uma string até o final da linha**
 +
 +O comando
 +<sxh bash>
 +sed '​s/​dia.*$//'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​s/​dia.*$//'​ arquivo.txt ​
 +  No início do início, era um nada.
 +   No segundo ​
 +    No terceiro ​
 +     No quarto ​
 +
 +  - Sexta-feira eu continuo, se não estiver cansado...
 +
 +    E no fim, nada.
 +</​sxh>​
 +
 +**Apagar a última string da linha**
 +
 +O comando
 +<sxh bash>
 +sed 's/ [^ ]\+ *$//g'
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed 's/ [^ ]\+ *$//g' arquivo.txt ​
 +  No início do início, era um
 +   No segundo dia, fez um rascunho à
 +    No terceiro dia, apagou e começou tudo de
 +     No quarto dia, ficou com preguiça, então
 +
 +  - Sexta-feira eu continuo, se não estiver
 +
 +    E no fim,
 +</​sxh>​
 +
 +**Colocar todas as linhas em uma só**
 +
 +O comando
 +<sxh bash>
 +sed ':​a;​$!N;​s/​\n//;​ta;'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed ':​a;​$!N;​s/​\n//;​ta;'​ 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.
 +</​sxh>​
 +
 +**Juntar a linha com a próxima**
 +
 +O comando
 +<sxh bash>
 +sed '​N;​s/​\n//'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​N;​s/​\n//'​ 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.
 +</​sxh>​
 +
 +**Substituir caractere por outro até uma TAG**
 +
 +**OBS:** troca '​o'​ por '​x'​ até encontrar a primeira ','​
 +
 +O comando
 +<sxh bash>
 +sed ':​a;​s/​^\([^,​]\+\)o/​\1x/;​ta'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed ':​a;​s/​^\([^,​]\+\)o/​\1x/;​ta'​ arquivo.txt
 +  Nx inícix dx inícix, era um nada.
 +   Nx segundx dia, fez um rascunho à lápis.
 +    Nx terceirx dia, apagou e começou tudo de novo.
 +     Nx quartx dia, ficou com preguiça, então falou:
 +
 +  - Sexta-feira eu cxntinux, se não estiver cansado...
 +
 +    E nx fim, nada.
 +</​sxh>​
 +
 +**Substituir caractere por outro entre TAGs**
 +
 +**OBS:** troca '​o'​ por '​x'​ entre a segunda e terceira ','​
 +
 +O comando
 +<sxh bash>
 +sed ':​a;​s/​^\([^,​]*,​[^,​]\+\)o/​\1x/;​ta'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed ':​a;​s/​^\([^,​]*,​[^,​]\+\)o/​\1x/;​ta'​ arquivo.txt ​ No início do início, era um nada.
 +   No segundo dia, fez um rascunhx à lápis.
 +    No terceiro dia, apagxu e cxmeçxu tudx de nxvx.
 +     No quarto dia, ficxu cxm preguiça, então falou:
 +
 +  - Sexta-feira eu continuo, se nãx estiver cansadx...
 +
 +    E no fim, nada.
 +</​sxh>​
 +
 +**Substituir string por outra somente em certas linhas**
 +
 +**OBS:** substitui '​dia'​ por '​noite'​ somente em linhas que contém a string '​terceiro'​
 +
 +O comando
 +<sxh bash>
 +sed '/​terceiro/​s/​dia/​noite/​g'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '/​terceiro/​s/​dia/​noite/​g'​ arquivo.txt
 +  No início do início, era um nada.
 +   No segundo dia, fez um rascunho à lápis.
 +    No terceiro noite, 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.
 +</​sxh>​
 +
 +**Substituir string por outra somente em certas linhas II**
 +
 +**OBS:** substitui '​dia'​ por '​noite'​ nas linha que NÃO contém a string '​terceiro'​
 +
 +O comando
 +<sxh bash>
 +sed '/​terceiro/​!s/​dia/​noite/​g'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '/​terceiro/​!s/​dia/​noite/​g'​ arquivo.txt
 +  No início do início, era um nada.
 +   No segundo noite, fez um rascunho à lápis.
 +    No terceiro dia, apagou e começou tudo de novo.
 +     No quarto noite, ficou com preguiça, então falou:
 +
 +  - Sexta-feira eu continuo, se não estiver cansado...
 +
 +    E no fim, nada.
 +</​sxh>​
 +
 +**Substituir a última ocorrência de uma string por outra**
 +
 +O comando
 +<sxh bash>
 +sed ':​a;​$!{N;​ba;​};​s/​\(.*\)dia/​\1noite/'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed ':​a;​$!{N;​ba;​};​s/​\(.*\)dia/​\1noite/'​ 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 noite, ficou com preguiça, então falou:
 +
 +  - Sexta-feira eu continuo, se não estiver cansado...
 +
 +    E no fim, nada.
 +</​sxh>​
 +
 +**Trocar a ordem das palavras (última vira primeira, penúltima vira segunda....)**
 +
 +**OBS:** se o seu arquivo tiver o caractere '​§'​ troque o '​§'​ do sed por outro carectere que não exista.
 +
 +O comando
 +<sxh bash>
 +sed '​s/​^/​§ /;:​a;​s/​\(.*\)§ \+\([^ ]\+\)/\2 \1§/;​ta;​s/​§//'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​s/​^/​§ /;:​a;​s/​\(.*\)§ \+\([^ ]\+\)/\2 \1§/;​ta;​s/​§//'​ arquivo.txt
 +nada. um era início, do início No 
 +lápis. à rascunho um fez dia, segundo No 
 +novo. de tudo começou e apagou dia, terceiro No 
 +falou: então preguiça, com ficou dia, quarto No 
 + 
 +cansado... estiver não se continuo, eu Sexta-feira - 
 + 
 +nada. fim, no E 
 +</​sxh>​
 +
 +**Trocar a ordem das letras (igual ao comando rev)**
 +
 +O comando
 +<sxh bash>
 +sed '​s/​^/​§/;:​a;​s/​\(.*\)§\(.\)/​\2\1§/;​ta;​s/​§$//'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​s/​^/​§/;:​a;​s/​\(.*\)§\(.\)/​\2\1§/;​ta;​s/​§$//'​ arquivo.txt
 +.adan mu are ,oicíni od oicíni oN  ​
 +.sipál à ohnucsar mu zef ,aid odnuges oN   
 +.ovon ed odut uoçemoc e uogapa ,aid oriecret oN    ​
 +:uolaf oãtne ,açiugerp moc uocif ,aid otrauq oN     
 +
 +...odasnac revitse oãn es ,ounitnoc ue arief-atxeS -  ​
 +
 +.adan ,mif on E  ​
 +</​sxh>​
 +
 +**Trocar de maiúsculas para minúsculas**
 +
 +O comando
 +<sxh bash>
 +sed '​y/​ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/​abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​y/​ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/​abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/'​ 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.
 +</​sxh>​
 +
 +**Trocar de minúsculas para maiúsculas**
 +
 +O comando
 +<sxh bash>
 +sed '​y/​abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/​ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/'​
 +</​sxh>​
 +
 +Vamos testar em nosso arquivo
 +<sxh bash>
 +sed '​y/​abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/​ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/'​ 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.
 +</​sxh>​
 +====== Referências ======
 +  - http://​thobias.org/​doc/​sosed.html
 +  - http://​aurelio.net/​sed/​alfabeto.html
 +  - http://​aurelio.net/​sed/​sed-HOWTO/​sed-HOWTO-2.html