Sei sulla pagina 1di 8

s sed

http://thobias.org/doc/sosed.html#toc32

s sed
Thobias Salazar Trevisan
21/05/2003
1. Introduo
1.1. Agradecimentos
1.2. Texto padro
2. Brincando com Linhas
2.1. Imprimir somente as linhas com uma determinada string
2.2. Imprimir somente a primeira ocorrncia da linha com determinada string
2.3. Imprimir a ltima ocorrncia da linha com determinada string
2.4. Imprimir da primeira ocorrncia da string at o nal
2.5. Imprimir da ltima ocorrncia da string at o nal
2.6. Apagar as linhas com uma determinada string
2.7. Apagar apenas a primeira linha com determinada string I
2.8. Apagar apenas a primeira linha com determinada string II
2.9. Adicionar texto no incio da linha
2.10. Adicionar texto no nal da linha
2.11. Retirar linhas em branco
2.12. Incluir texto no incio da linha N
2.13. Incluir texto no nal da linha N
2.14. Incluir texto na linha N apagando o contedo existente
2.15. Incluir texto antes da linha N
2.16. Incluir linha aps a ltima
2.17. Imprimir somente a linha N
2.18. Retirar a linha N
2.19. Extrair um trecho de uma linha
2.20. Retirar espaos em branco repetidos
2.21. Retirar espaos em branco no incio da linha
2.22. Apagar uma string do incio da linha
2.23. Apagar do incio da linha at uma string
2.24. Apagar de uma string at o nal da linha
2.25. Apagar a ltima string da linha
2.26. Colocar todas as linhas em uma s
2.27. Juntar a linha com a prxima
2.28. Substituir caractere por outro at uma TAG
2.29. Substituir caractere por outro entre TAGs
2.30. Substituir string por outra somente em certas linhas
2.31. Substituir string por outra somente em certas linhas II
2.32. Substituir a ltima ocorrncia de uma string por outra
2.33. Trocar a ordem das palavras (ltima vira primeira, penltima vira segunda....)
2.34. Trocar a ordem das letras (igual ao comando rev)
2.35. Trocar de maisculas para minsculas
2.36. Trocar de minsculas para maisculas
3. Brincando com Partes do texto
3.1. Imprimir a linha antes de uma string
3.2. Imprimir a linha antes de uma string e a linha da string
3.3. Imprimir a linha aps uma string
3.4. Imprimir a linha aps uma string e a linha da string
3.5. Imprimir a linha anterior, posterior e a linha que contm uma string
3.6. Imprimir a linha anterior e posterior a linha que contm uma string
3.7. Imprimir N linhas antes, a linha da string e M linhas aps uma string I
3.8. Imprimir N linhas antes, a linha da string e M linhas aps uma string II
3.9. Adicionar linha antes de uma string
3.10. Adicionar linha aps a linha com uma determinada string
3.11. Imprimir somente entre linha N e M
3.12. Substituir uma string por outra somente entre determinadas linhas
3.13. Imprimir linhas que contm uma ou outra string
3.14. Imprimir linhas que contm uma e outra string
3.15. Extrair um trecho do arquivo
3.16. Extrair trecho que pode ou no estar na mesma linha
3.17. Extrair trecho que pode ou no estar na mesma linha tirando os delimitadores
3.18. Apagar o que est entre delimitadores
3.19. Apagar um trecho se ele contm um padro
3.20. Trocar de lugar a linha com a prxima (troca de lugar linha 1 com 2, 3 com 4...) I
3.21. Trocar de lugar a linha com a prxima (troca de lugar linha 1 com 2, 3 com 4...) II
4. Utilidade Pblica
4.1. Retirar comandos HTML (tudo entre < e >)
4.2. Pesquisar se existe algum usurio sem senha no /etc/passwd

1. Introduo
Este texto se prope a ser uma maneira fcil das pessoas acharem aquele sed perdido para resolver seu problema, ou seja, aqui vamos direto ao ponto, sem frescura ou enrolao.
Se voc est procurando um texto que explique o SED, visite estes links:
http://sed.sourceforge.net/ - Pgina $HOME do sed
http://aurelio.net/sed/sed-HOWTO/ - sed HOWTO em pt_BR
http://aurelio.net/sed/ - pgina com links e programas em sed (pt_BR)
http://br.groups.yahoo.com/group/sed-br/ - pgina da lista sed-br
http://sed.sourceforge.net/sedfaq.html - The sed FAQ (english)
http://www.math.fu-berlin.de/user/guckes/sed/ - pgina da lista sed users (vrios links e docs - english)
http://aurelio.net/er/ - expresses regulares (pt_BR)
1.1. Agradecimentos
A idia de elaborar este documento surgiu em um mail do Aurlio para a lista de discusso sed-br. Se voc quiser acompanhar as threads da criao aqui vo 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 construo deste documento.
A galera que contribuiu:
Aurlio Marinho Jargas
Silvano B. Dias
Anilton Lucas
A lista sed-br
1.2. Texto padro
Em todos os exemplos vamos procurar manter sempre o mesmo texto para facilitar a compreenso das perguntas e respostas. Esperamos deste modo deixar o s sed mais amigvel e que voc ache a sua pergunta de
maneira fcil e agil. =8)
Dica:
Leia o arquivo de entrada com calma. Analise-o, respire e releia-o.
Assim car mais fcil para voc entender os exemplos e as mudanas ocorridas aps a execuo de cada sed.
O arquivo.txt de exemplo :

1 de 8

09-04-2015 13:53

s sed

http://thobias.org/doc/sosed.html#toc32
prompt> cat arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2. Brincando com Linhas


2.1. Imprimir somente as linhas com uma determinada string
sed -n '/dia/p'
prompt> sed -n '/dia/p' arquivo.txt
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:

2.2. Imprimir somente a primeira ocorrncia da linha com determinada string


sed -n '/dia/{p;q;}'
prompt> sed -n '/dia/{p;q;}' arquivo.txt
No segundo dia, fez um rascunho lpis.

2.3. Imprimir a ltima ocorrncia da linha com determinada string


sed -n '/dia/h;${x;p;}'
prompt> sed -n '/dia/h;${x;p;}' arquivo.txt
No quarto dia, ficou com preguia, ento falou:

2.4. Imprimir da primeira ocorrncia da string at o nal


sed '/dia/,$!d'
prompt> sed '/dia/,$!d' arquivo.txt
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.5. Imprimir da ltima ocorrncia da string at o nal


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 preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.6. Apagar as linhas com uma determinada string


sed '/dia/d'
prompt> sed '/dia/d' arquivo.txt
No incio do incio, era um nada.
- Sexta-feira eu continuo, se no 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 incio do incio, era um nada.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no 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 incio do incio, era um nada.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.9. Adicionar texto no incio da linha


sed 's/^/texto incluido/'
prompt> sed 's/^/texto incluido/' arquivo.txt
texto incluidoNo incio do incio, era um nada.
texto incluido No segundo dia, fez um rascunho lpis.
texto incluido No terceiro dia, apagou e comeou tudo de novo.
texto incluido
No quarto dia, ficou com preguia, ento falou:
texto incluido
texto incluido- Sexta-feira eu continuo, se no estiver cansado...
texto incluido
texto incluido E no fim, nada.

2.10. Adicionar texto no nal da linha

2 de 8

09-04-2015 13:53

s sed

http://thobias.org/doc/sosed.html#toc32

sed 's/$/texto incluido/'


prompt> sed 's/$/texto incluido/' arquivo.txt
No incio do incio, era um nada.texto incluido
No segundo dia, fez um rascunho lpis.texto incluido
No terceiro dia, apagou e comeou tudo de novo.texto incluido
No quarto dia, ficou com preguia, ento falou:texto incluido
texto incluido
- Sexta-feira eu continuo, se no estiver cansado...texto incluido
texto incluido
E no fim, nada.texto incluido

2.11. Retirar linhas em branco


sed '/^$/d'
prompt> sed '/^$/d' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.12. Incluir texto no incio da linha N


OBS: troque o nmero 1 para a linha que voc quiser
sed '1s/^/comeo do arquivo/'
prompt> sed '1s/^/comeo do arquivo/' arquivo.txt
comeo do arquivoNo incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.13. Incluir texto no nal da linha N


OBS: troque o nmero 1 para a linha que voc quiser
sed '1s/$/final da linha/'
prompt> sed '1s/$/final da linha/' arquivo.txt
No incio do incio, era um nada.final da linha
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.14. Incluir texto na linha N apagando o contedo existente


OBS: troque o nmero 1 para a linha que voc quiser
sed '1s/.*/incio do arquivo/'
prompt> sed '1s/.*/incio do arquivo/' arquivo.txt
incio do arquivo
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.15. Incluir texto antes da linha N


OBS: troque o nmero 1 para a linha que voc quiser
sed -e '1i\' -e 'comeo do arquivo'
prompt> sed -e '1i\' -e 'comeo do arquivo' arquivo.txt
comeo do arquivo
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.16. Incluir linha aps a ltima


sed -e '$a\' -e 'linha final'
prompt> sed -e '$a\' -e 'linha final' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.
linha final

2.17. Imprimir somente a linha N


OBS: troque o nmero 2 para a linha que voc quiser
sed '2!d'
prompt> sed '2!d' arquivo.txt
No segundo dia, fez um rascunho lpis.

2.18. Retirar a linha N


OBS: troque o nmero 2 pela linha que voc quiser
sed '2d'

3 de 8

09-04-2015 13:53

s sed

http://thobias.org/doc/sosed.html#toc32
prompt> sed '2d' arquivo.txt
No incio do incio, era um nada.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no 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 lpis.
apagou e comeou tudo de novo.
ficou com preguia
se no estiver cansado...
nada.

2.20. Retirar espaos em branco repetidos


sed 's/[ ]\+/ /g'
prompt> sed 's/[ ]\+/ /g' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.21. Retirar espaos em branco no incio da linha


sed 's/^ \+//'
prompt> sed 's/^ \+//' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.22. Apagar uma string do incio da linha


sed 's/^No//'
prompt> sed 's/^No//' arquivo.txt
incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.23. Apagar do incio da linha at uma string


sed 's/^.*dia//'
prompt> sed 's/^.*dia//' arquivo.txt
No incio do incio, era um nada.
, fez um rascunho lpis.
, apagou e comeou tudo de novo.
, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.24. Apagar de uma string at o nal da linha


sed 's/dia.*$//'
prompt> sed 's/dia.*$//' arquivo.txt
No incio do incio, era um nada.
No segundo
No terceiro
No quarto
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.25. Apagar a ltima string da linha


sed 's/ [^ ]\+ *$//g'
prompt> sed 's/ [^ ]\+ *$//g' arquivo.txt
No incio do incio, era um
No segundo dia, fez um rascunho
No terceiro dia, apagou e comeou tudo de
No quarto dia, ficou com preguia, ento
- Sexta-feira eu continuo, se no estiver
E no fim,

2.26. Colocar todas as linhas em uma s


sed ':a;$!N;s/\n//;ta;'
prompt> sed ':a;$!N;s/\n//;ta;' arquivo.txt
No incio do incio, era um nada. No segundo dia, fez um rascunho lpis.

No terceiro dia, apagou e comeou tudo de novo.

No quarto dia, ficou com preguia, ento falou:- Sexta-feira eu continuo, se no estiver cansado...

E no fim, nada.

2.27. Juntar a linha com a prxima

4 de 8

09-04-2015 13:53

s sed

http://thobias.org/doc/sosed.html#toc32

sed 'N;s/\n//'
prompt> sed 'N;s/\n//' arquivo.txt
No incio do incio, era um nada. No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no 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 incix dx incix, era um nada.
Nx segundx dia, fez um rascunho lpis.
Nx terceirx dia, apagou e comeou tudo de novo.
Nx quartx dia, ficou com preguia, ento falou:
- Sexta-feira eu cxntinux, se no 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 incio do incio, era um nada.
No segundo dia, fez um rascunhx lpis.
No terceiro dia, apagxu e cxmexu tudx de nxvx.
No quarto dia, ficxu cxm preguia, ento falou:
- Sexta-feira eu continuo, se nx 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 contm a string 'terceiro'
sed '/terceiro/s/dia/noite/g'
prompt> sed '/terceiro/s/dia/noite/g' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro noite, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no 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 NO contm a string 'terceiro'
sed '/terceiro/!s/dia/noite/g'
prompt> sed '/terceiro/!s/dia/noite/g' arquivo.txt
No incio do incio, era um nada.
No segundo noite, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto noite, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.32. Substituir a ltima ocorrncia de uma string por outra


sed ':a;$!{N;ba;};s/\(.*\)dia/\1noite/'
prompt> sed ':a;$!{N;ba;};s/\(.*\)dia/\1noite/' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto noite, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

2.33. Trocar a ordem das palavras (ltima vira primeira, penltima vira segunda....)
OBS: se o seu arquivo tiver o caractere '' troque o '' do sed por outro carectere que no exista.
sed 's/^/ /;:a;s/\(.*\) \+\([^ ]\+\)/\2 \1/;ta;s///'
prompt> sed 's/^/ /;:a;s/\(.*\) \+\([^ ]\+\)/\2 \1/;ta;s///' arquivo.txt
nada. um era incio, do incio No
lpis. rascunho um fez dia, segundo No
novo. de tudo comeou e apagou dia, terceiro No
falou: ento preguia, com ficou dia, quarto No
cansado... estiver no 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 ,oicni od oicni oN
.sipl ohnucsar mu zef ,aid odnuges oN
.ovon ed odut uoemoc e uogapa ,aid oriecret oN
:uolaf otne ,aiugerp moc uocif ,aid otrauq oN
...odasnac revitse on es ,ounitnoc ue arief-atxeS .adan ,mif on E

2.35. Trocar de maisculas para minsculas

5 de 8

09-04-2015 13:53

s sed

http://thobias.org/doc/sosed.html#toc32

sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'
prompt> sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' arquivo.txt
no incio do incio, era um nada.
no segundo dia, fez um rascunho lpis.
no terceiro dia, apagou e comeou tudo de novo.
no quarto dia, ficou com preguia, ento falou:
- sexta-feira eu continuo, se no estiver cansado...
e no fim, nada.

2.36. Trocar de minsculas para maisculas


sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'
prompt> sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' arquivo.txt
NO INCIO DO INCIO, ERA UM NADA.
NO SEGUNDO DIA, FEZ UM RASCUNHO LPIS.
NO TERCEIRO DIA, APAGOU E COMEOU TUDO DE NOVO.
NO QUARTO DIA, FICOU COM PREGUIA, ENTO FALOU:
- SEXTA-FEIRA EU CONTINUO, SE NO 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 incio do incio, 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 incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.

3.3. Imprimir a linha aps uma string


sed -n '/segundo/{n;p;}'
prompt> sed -n '/segundo/{n;p;}' arquivo.txt
No terceiro dia, apagou e comeou tudo de novo.

3.4. Imprimir a linha aps uma string e a linha da string


sed -n '/segundo/{N;p;}'
prompt> sed -n '/segundo/{N;p;}' arquivo.txt
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.

3.5. Imprimir a linha anterior, posterior e a linha que contm 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 lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:

3.6. Imprimir a linha anterior e posterior a linha que contm 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 lpis.
No quarto dia, ficou com preguia, ento falou:

3.7. Imprimir N linhas antes, a linha da string e M linhas aps uma string I
OBS: 'quarto' a string, troque o '2' de 1,2 para o nmero de linhas antes, e adicione quantos 'Ns' para linhas aps. 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 lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...

3.8. Imprimir N linhas antes, a linha da string e M linhas aps uma string II
OBS: troque o nmero entre chaves '{2}' pelo nmero de linhas antes da string e adicione quandos 'Ns' para linhas aps. 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 lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no 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

6 de 8

09-04-2015 13:53

s sed

http://thobias.org/doc/sosed.html#toc32
No incio do incio, era um nada.
Texto adicionado
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

3.10. Adicionar linha aps a linha com uma determinada string


sed '/segundo/{p;s/.*/Texto adicionado/;}'
prompt> sed '/segundo/{p;s/.*/Texto adicionado/;}' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
Texto adicionado
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

3.11. Imprimir somente entre linha N e M


sed '4,6!d'
prompt> sed '4,6!d' arquivo.txt
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...

3.12. Substituir uma string por outra somente entre determinadas linhas
sed '3,6s/dia/noite/'
prompt> sed '3,6s/dia/noite/' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro noite, apagou e comeou tudo de novo.
No quarto noite, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

3.13. Imprimir linhas que contm uma ou outra string


OBS: imprime linhas que contm a string 'segundo' ou 'quarto'
sed '/segundo\|quarto/!d'
prompt> sed '/segundo\|quarto/!d' arquivo.txt
No segundo dia, fez um rascunho lpis.
No quarto dia, ficou com preguia, ento falou:

3.14. Imprimir linhas que contm uma e outra string


OBS: imprime linhas que contm 'No' e 'segundo'
sed -n '/No.*segundo/p'
prompt> sed -n '/No.*segundo/p' arquivo.txt
No segundo dia, fez um rascunho lpis.

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 lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:

3.16. Extrair trecho que pode ou no 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 lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:

3.17. Extrair trecho que pode ou no estar na mesma linha tirando os delimitadores
OBS: 'segundo' a TAG inicial e 'falou' a TAG nal
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 lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento

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 incio do incio, era um nada.
No n:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

3.19. Apagar um trecho se ele contm um padro


OBS: 'segundo' marca o incio do trecho, 'quarto' o nal, e 'rascunho' o padro de procura

7 de 8

09-04-2015 13:53

s sed

http://thobias.org/doc/sosed.html#toc32

sed '/segundo/{:a;/quarto/!{N;ba;};/rascunho/d;}'
prompt> sed '/segundo/{:a;/quarto/!{N;ba;};/rascunho/d;}' arquivo.txt
No incio do incio, era um nada.
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

3.20. Trocar de lugar a linha com a prxima (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 lpis.
No incio do incio, era um nada.
No quarto dia, ficou com preguia, ento falou:
No terceiro dia, apagou e comeou tudo de novo.
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

3.21. Trocar de lugar a linha com a prxima (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 lpis.
No incio do incio, era um nada.
No quarto dia, ficou com preguia, ento falou:
No terceiro dia, apagou e comeou tudo de novo.
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

4. Utilidade Pblica
4.1. Retirar comandos HTML (tudo entre < e >)
sed 's/<[^>]*>//g'
prompt> sed 's/<[^>]*>//g' arquivo.txt
No incio do incio, era um nada.
No segundo dia, fez um rascunho lpis.
No terceiro dia, apagou e comeou tudo de novo.
No quarto dia, ficou com preguia, ento falou:
- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.

4.2. Pesquisar se existe algum usurio sem senha no /etc/passwd


sed -n '/^[^:]\+::/p'
prompt> sed -n '/^[^:]\+::/p' arquivo.txt

This HTML page is

8 de 8

(see source)

09-04-2015 13:53

Potrebbero piacerti anche