Sed - Introdução

Introdução ao Sed, por meio de exemplos, cobrindo os tópicos: enviando dados pro sed, selecionando as linhas para edição, substituição, scripts em sed, expressões regulares, referências por &, back reference, hold space/ espaço reserva, dicas de comandos, jogos, exemplos e material para prosseguir nos estudos sobre Sed.

[ Hits: 84.810 ]

Por: jarlisson moreira em 16/07/2012


Enviando dados para o sed



Vamos usar o arquivo /etc/passwd.

Digite:

cat /etc/passwd

Agora vamos passar esse arquivo pro sed, através de pipe, | :

cat /etc/passwd | sed ''

O sed sempre mostra o resultado da edição feita em cada linha, nesse caso, nenhuma. Por isso aparece tudo do passwd.

Agora vamos deletar todas as linhas. Mas não se preocupe, vamos deletar somente o que está no buffer do sed:

cat /etc/passwd | sed 'd'

O comando d deleta a linha atual do buffer e imprime o resultado, de novo e de novo, até o fim do arquivo. Como não dissemos para escrever, ele apenas lê e não altera o arquivo.

Para redirecionar o resultado do sed, ao invés dele ser mostrado na tela, usamos a forma padrão do sed, com o '>':

cat /etc/passwd | sed 'd' > /tmp/newpasswd

Outra maneira de invocar dados pro sed, é através da flag -e, sem usar pipe. Desta maneira, faça no seguinte padrão:

sed -e 'comandos/de/edição' /caminho/do/arquivo

No nosso exemplo, ficaria:

sed -e 'd' /etc/passwd

Vale lembrar que em algumas versões do sed, não é necessário o '-e'. Teste aí no seu.

Note que o sed automaticamente imprime o resultado que foram processados. Caso não queira vê-los, use a flag '-n':

cat /etc/passwd | sed -n ''

Caso você queira que, em alguma situação, seja mostrado algo, use o comando p, como o comando d. Ou seja, o comando a seguir não tem efeito nenhum:

cat /etc/passwd | sed -n 'p' | head -10

O head é pra mostrar apenas as primeiras saídas.

Vamos mostrar como especificar endereços pro sed trabalhar.

Para efeitos de estudo, salve arquivo: teste.txt

1
2
3
4
5
6


Para apagar a linha n, use 'nd' ao invés de somente 'd', como foi mostrado antes:

cat teste.txt | sed '1d'

Nesse caso, o sed percorre cada linha e aplica o comando. O comando é 'caso a linha seja a primeira, apague-a'.

Intervalo de endereços

Para definirmos um intervalo para o sed operar, colocamos o endereço do início separado do endereço do fim separado por vírgula. Por exemplo, vamos apagar da segunda até a quarta linha:

cat teste.txt | sed '2,4d'

Sabendo que o sed trabalha de forma sequencial, sempre do início pro fim do arquivo, interprete o resultado de:

cat teste.txt | sed '4,2d'

Se quisermos apagar uma linha e as próximas 3, por exemplo, usamos '+3' como endereço:

cat teste.txt | sed '1,+3d'

Porém, se ao invés de apagar certas linhas quisermos apagas todas as outras, menos ela?

Simples, usamos o bom e velho operador de negação '!', após o endereçamento.

Vamos apagar todas, menos a primeira linha:

cat teste.txt | sed '1!d'

Todo, menos da terceira até a quinta linha:

cat teste.txt | sed '3,5!d'

Ou:

cat teste.txt | sed '3,+2!d'

Endereços em forma de PA

Se lembra de PA - Progressão Aritmética?

Por exemplo, uma PA de elemento inicial 1 e razão 3: 1, 4, 7, 10.

Podemos usar isso em sed com o comando a~r, onde "a" é o número inicial, e "r" a razão. Exemplo:

cat teste.txt | sed '1~3d'

Muitas vezes, queremos ver o que foi apagado, para isso negamos o endereçamento:

cat teste.txt | sed '1~3!d'

Página anterior     Próxima página

Páginas do artigo
   1. Introdução - o que é e para que serve
   2. Enviando dados para o sed
   3. Substituindo
   4. Scripts em sed
   5. Expressões regulares
   6. Referenciando com & - Back reference
   7. Hold space
   8. Por onde prosseguir e considerações finais
Outros artigos deste autor

Processos

Pipelines (Canalizadores)

Shell - Funções

AWK - Introdução

LibreOffice Math

Leitura recomendada

Reconhecimento de Voz no Linux

Introdução ao Shell Script

Shell Script 1 - Básico

Variáveis, if, else e unless em Ruby

Introduzindo um pouco mais a fundo o shell script (revisado)

  
Comentários
[1] Comentário enviado por eldermarco em 16/07/2012 - 10:53h

Muito bom! Super bem escrito e bastante didático, exatamente como o artigo sobre o AWK que você escreveu. Nota 10!

[2] Comentário enviado por removido em 16/07/2012 - 12:42h

i like too!

[3] Comentário enviado por eduardo em 16/07/2012 - 14:13h

Ótimo artigo! Parabéns! Acabei de perceber que uso menos de 5% do poder do sed. :)

[4] Comentário enviado por sir.guil em 16/07/2012 - 15:05h

Parabéns, era uma coisa que faltava aqui no vol,

sempre que precisei estudar o sed, dependi do http://aurelio.net/sed/

agora estamos + completos

[5] Comentário enviado por julio_hoffimann em 16/07/2012 - 17:56h

Novamente parabéns Jarlisson!

Artigos bastante claros que ajudarão muitos no VOL.

Abraço!

[6] Comentário enviado por marcelo.castro.l em 17/07/2012 - 08:10h

Cara, muito bom esse artigo.
Salvou minha pátria aqui na empresa.
Precisava manipular um arquivo gerado pelo:

#iptables -L

Porém não precisava dele formatado com os espaços, graças ao "sed" tudo fluiu perfeitamente.

Obrigado!

[7] Comentário enviado por H4cktz em 19/02/2019 - 12:09h

Muito bom! Super bem escrito e bastante didático, Nota 1000! Finalmente estou aprendendo SED!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts