Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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 de 8
09-04-2015 13:53
s sed
http://thobias.org/doc/sosed.html#toc32
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.
No quarto dia, ficou com preguia, ento falou:- Sexta-feira eu continuo, se no estiver cansado...
E no fim, nada.
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.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
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.
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...
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.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.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
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.
8 de 8
(see source)
09-04-2015 13:53