Autor: Thobias Salazar Trevisan
fonte:http://thobias.org/doc/sosed.html
só sed
Thobias Salazar Trevisan
21/05/2003
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:
1.1. Agradecimentos
A idéia de elaborar este documento surgiu em
um mail do
Aurélio para a lista de discussão sed-br. Se você quiser acompanhar as threads da
criação aqui vão os links para as 3 threads principais:
1. sed FAQ (era: Re:
concatenar linhas
2. FAQ
sed
3. Opine sobre o
nome do documento da lista
Aqui vai meu muito obrigado para as
pessoas que ajudaram na construção deste documento.
1.2. 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:
Leia o arquivo de entrada com calma. Analise-o,
respire e releia-o. |
Assim ficará mais fácil para você entender os exemplos
e as mudanças ocorridas após a execução de cada sed.
O arquivo.txt de exemplo é:
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. |
2. Brincando com Linhas
2.1. Imprimir somente as linhas com uma determinada
string
prompt> 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: |
2.2. Imprimir somente a primeira ocorrência da linha
com determinada string
prompt> sed -n '/dia/{p;q;}'
arquivo.txt
No segundo dia, fez um rascunho
à lápis. |
2.3. Imprimir a última ocorrência da linha com
determinada string
prompt> sed -n
'/dia/h;${x;p;}' arquivo.txt
No
quarto dia, ficou com preguiça, então falou: |
2.4. Imprimir da primeira ocorrência da string até o
final
prompt> 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. |
2.5. Imprimir da última ocorrência da string até o
final
sed -n
'/dia/{h;${x;p;};d;};H;${x;p;}' |
prompt> 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. |
2.6. Apagar as linhas com uma determinada
string
prompt> 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. |
2.7. Apagar apenas a primeira linha com determinada
string I
sed '/dia/{H;x;/^\n/d;g;}' |
prompt> 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. |
2.8. Apagar apenas a primeira linha com determinada
string II
sed -n '/dia/{:a;n;p;ba;};p' |
prompt> 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. |
2.9. Adicionar texto no início da
linha
sed 's/^/texto incluido/' |
prompt> sed 's/^/texto
incluido/' arquivo.txt
texto incluidoNo 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. |
2.10. Adicionar texto no final da
linha
sed 's/$/texto incluido/' |
prompt> 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 |
2.11. Retirar linhas em branco
prompt> 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. |
2.12. Incluir texto no início da linha
N
OBS: troque o número 1 para a linha que você
quiser
sed '1s/^/começo do arquivo/' |
prompt> sed '1s/^/começo do
arquivo/' arquivo.txt
começo do arquivoNo 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. |
2.13. Incluir texto no final da linha
N
OBS: troque o número 1 para a linha que você
quiser
sed '1s/$/final da linha/' |
prompt> 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. |
2.14. Incluir texto na linha N apagando o conteúdo
existente
OBS: troque o número 1 para a linha que você
quiser
sed '1s/.*/início do arquivo/' |
prompt> 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. |
2.15. Incluir texto antes da linha
N
OBS: troque o número 1 para a linha que você
quiser
sed -e '1i\' -e 'começo do
arquivo' |
prompt> 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. |
2.16. Incluir linha após a última
sed -e '$a\' -e 'linha final' |
prompt> 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 |
2.17. Imprimir somente a linha N
OBS: troque o número 2 para a linha que você
quiser
prompt> sed '2!d'
arquivo.txt
No segundo dia, fez um rascunho
à lápis. |
2.18. Retirar a linha N
OBS: troque o número 2 pela linha que você
quiser
prompt> 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. |
2.19. Extrair um trecho de uma
linha
OBS: O mesmo que cut -d, -f2
sed
's/^[^,]*,\([^,]\+\),\?.*/\1/' |
prompt> 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. |
2.20. Retirar espaços em branco
repetidos
prompt> 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. |
2.21. Retirar espaços em branco no início da
linha
prompt> 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. |
2.22. Apagar uma string do início da
linha
prompt> sed 's/^No//'
arquivo.txt
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. |
2.23. Apagar do início da linha até uma
string
prompt> 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. |
2.24. Apagar de uma string até o final da
linha
prompt> 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. |
2.25. Apagar a última string da
linha
prompt> 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, |
2.26. Colocar todas as linhas em uma
só
prompt> 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. |
2.27. Juntar a linha com a próxima
prompt> 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. |
2.28. Substituir caractere por outro até uma
TAG
OBS: troca 'o' por 'x' até encontrar a primeira
','
sed
':a;s/^\([^,]\+\)o/\1x/;ta' |
prompt> 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. |
2.29. Substituir caractere por outro entre
TAGs
OBS: troca 'o' por 'x' entre a segunda e terceira
','
sed
':a;s/^\([^,]*,[^,]\+\)o/\1x/;ta' |
prompt> 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. |
2.30. Substituir string por outra somente em certas
linhas
OBS: substitui 'dia' por 'noite' somente em linhas que
contém a string 'terceiro'
sed '/terceiro/s/dia/noite/g' |
prompt> 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. |
2.31. Substituir string por outra somente em certas
linhas II
OBS: substitui 'dia' por 'noite' nas linha que NÃO
contém a string 'terceiro'
sed '/terceiro/!s/dia/noite/g' |
prompt> 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. |
2.32. Substituir a última ocorrência de uma string
por outra
sed
':a;$!{N;ba;};s/\(.*\)dia/\1noite/' |
prompt> 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. |
2.33. 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.
sed 's/^/§ /;:a;s/\(.*\)§ \+\([^ ]\+\)/\2
\1§/;ta;s/§//' |
prompt> 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 |
2.34. Trocar a ordem das letras (igual ao comando
rev)
sed
's/^/§/;:a;s/\(.*\)§\(.\)/\2\1§/;ta;s/§$//' |
prompt> 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 |
2.35. Trocar de maiúsculas para
minúsculas
sed
'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/' |
prompt> 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. |
2.36. Trocar de minúsculas para
maiúsculas
sed
'y/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/' |
prompt> 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. |
3. Brincando com Partes do texto
3.1. Imprimir a linha antes de uma
string
sed -n '/segundo/{x;p;};h' |
prompt> sed -n
'/segundo/{x;p;};h' arquivo.txt
No início do início, era um
nada. |
3.2. Imprimir a linha antes de uma string e a linha
da string
sed -n '/segundo/{H;x;p;};h' |
prompt> sed -n
'/segundo/{H;x;p;};h' arquivo.txt
No início do início, era um
nada.
No segundo dia, fez um rascunho
à lápis. |
3.3. Imprimir a linha após uma
string
prompt> sed -n
'/segundo/{n;p;}' arquivo.txt
No terceiro dia, apagou e
começou tudo de novo. |
3.4. Imprimir a linha após uma string e a linha da
string
prompt> sed -n
'/segundo/{N;p;}' arquivo.txt
No segundo dia, fez um rascunho
à lápis.
No terceiro dia, apagou e
começou tudo de novo. |
3.5. Imprimir a linha anterior, posterior e a linha
que contém uma string
sed -n
'/terceiro/{H;x;p;n;p;};h' |
prompt> sed -n
'/terceiro/{H;x;p;n;p;};h' 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: |
3.6. Imprimir a linha anterior e posterior a linha
que contém uma string
sed -n
'/terceiro/{x;p;n;p;};h' |
prompt> sed -n
'/terceiro/{x;p;n;p;};h' arquivo.txt
No segundo dia, fez um rascunho
à lápis.
No
quarto dia, ficou com preguiça, então falou: |
3.7. Imprimir N linhas antes, a linha da string e M
linhas após uma string I
OBS: 'quarto' é a string, troque o '2' de 1,2 para o
número de linhas antes, e adicione quantos 'Ns' para linhas após.
No exemplo está 2 antes e 2 depois
sed -n
'/quarto/{x;p;x;N;N;p;q;};1!{H;g;};1,2!s/[^\n]*\n//;h;' |
prompt> sed -n
'/quarto/{x;p;x;N;N;p;q;};1!{H;g;};1,2!s/[^\n]*\n//;h;' 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... |
3.8. Imprimir N linhas antes, a linha da string e M
linhas após uma string II
OBS: troque o número entre chaves '{2}' pelo número de
linhas antes da string e adicione quandos 'Ns' para linhas após.
No exemploestá 2 antes e 2 depois
sed 'H;/quarto/{g;N;N;s/^\n//p;};
x;s/.*\(\(\n[^\n]*\)\{2\}\)/\1/;x ;d' |
prompt> sed
'H;/quarto/{g;N;N;s/^\n//p;}; x;s/.*\(\(\n[^\n]*\)\{2\}\)/\1/;x ;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... |
3.9. Adicionar linha antes de uma
string
OBS: inclui o 'Texto adicionado' antes da linha com a
string 'segundo'
sed '/segundo/{h;s/.*/Texto
adicionado/;p;x;}' |
prompt> sed
'/segundo/{h;s/.*/Texto adicionado/;p;x;}' arquivo.txt
No início do início, era um
nada.
Texto adicionado
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. |
3.10. Adicionar linha após a linha com uma
determinada string
sed '/segundo/{p;s/.*/Texto
adicionado/;}' |
prompt> sed
'/segundo/{p;s/.*/Texto adicionado/;}' arquivo.txt
No início do início, era um
nada.
No segundo dia, fez um rascunho
à lápis.
Texto adicionado
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. |
3.11. Imprimir somente entre linha N e
M
prompt> sed '4,6!d'
arquivo.txt
No
quarto dia, ficou com preguiça, então falou:
- Sexta-feira eu continuo, se
não estiver cansado... |
3.12. Substituir uma string por outra somente entre
determinadas linhas
prompt> sed '3,6s/dia/noite/'
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 noite, ficou com preguiça, então falou:
- Sexta-feira eu continuo, se
não estiver cansado...
E no fim, nada. |
3.13. Imprimir linhas que contém uma ou outra
string
OBS: imprime linhas que contém a string 'segundo' ou
'quarto'
sed '/segundo\|quarto/!d' |
prompt> sed
'/segundo\|quarto/!d' arquivo.txt
No segundo dia, fez um rascunho
à lápis.
No
quarto dia, ficou com preguiça, então falou: |
3.14. Imprimir linhas que contém uma e outra
string
OBS: imprime linhas que contém 'No' e
'segundo'
prompt> sed -n
'/No.*segundo/p' arquivo.txt
No segundo dia, fez um rascunho
à lápis. |
3.15. Extrair um trecho do arquivo
sed -n '/segundo/,/quarto/p' |
prompt> sed -n
'/segundo/,/quarto/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: |
3.16. Extrair trecho que pode ou não estar na mesma
linha
sed -n
'/segundo/{:a;/quarto/!{N;ba;};p;}' |
prompt> sed -n
'/segundo/{:a;/quarto/!{N;ba;};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: |
3.17. Extrair trecho que pode ou não estar na mesma
linha tirando os delimitadores
OBS: 'segundo' é a TAG inicial e 'falou' a TAG
final
sed -n
'/segundo/{/falou/tc;:a;/falou/!{N;ba;};:c;s/.*segundo//;s/falou.*$//;p;}' |
prompt> sed -n
'/segundo/{/falou/tc;:a;/falou/!{N;ba;};:c;s/.*segundo//;s/falou.*$//;p;}'
arquivo.txt
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 |
3.18. Apagar o que está entre
delimitadores
sed
'/segundo/{/falou/{s/segundo.*falou//;t};:a;/falou/!{N;s/\n//;ta;};s/segundo.*falou/\n/;}' |
prompt> sed
'/segundo/{/falou/{s/segundo.*falou//;t};:a;/falou/!{N;s/\n//;ta;};s/segundo.*falou/\n/;}'
arquivo.txt
No início do início, era um
nada.
No n:
- Sexta-feira eu continuo, se
não estiver cansado...
E no fim, nada. |
3.19. Apagar um trecho se ele contém um
padrão
OBS: 'segundo' marca o início do trecho, 'quarto' o
final, e 'rascunho' é o padrão de procura
sed
'/segundo/{:a;/quarto/!{N;ba;};/rascunho/d;}' |
prompt> sed
'/segundo/{:a;/quarto/!{N;ba;};/rascunho/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. |
3.20. Trocar de lugar a linha com a próxima (troca de
lugar linha 1 com 2, 3 com 4...) I
sed -n '$ba;h;n;p;x;:a;p' |
prompt> sed -n
'$ba;h;n;p;x;:a;p' arquivo.txt
No segundo dia, fez um rascunho
à lápis.
No início do início, era um
nada.
No
quarto dia, ficou com preguiça, então falou:
No terceiro dia, apagou e
começou tudo de novo.
- Sexta-feira eu continuo, se
não estiver cansado...
E no fim, nada.
|
3.21. Trocar de lugar a linha com a próxima (troca de
lugar linha 1 com 2, 3 com 4...) II
sed
'N;s/\([^\n]*\)\(\n\)\([^\n]*\)/\3\2\1/' |
prompt> sed
'N;s/\([^\n]*\)\(\n\)\([^\n]*\)/\3\2\1/' arquivo.txt
No segundo dia, fez um rascunho
à lápis.
No início do início, era um
nada.
No
quarto dia, ficou com preguiça, então falou:
No terceiro dia, apagou e
começou tudo de novo.
- Sexta-feira eu continuo, se
não estiver cansado...
E no fim, nada.
|
4. Utilidade Pública
4.1. Retirar comandos HTML (tudo entre < e
>)
prompt> 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. |
4.2. Pesquisar se existe algum usuário sem senha no
/etc/passwd
prompt> sed -n '/^[^:]\+::/p'
arquivo.txt |