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: 69.930 ]

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

Shell - Funções

LibreOffice Math

Processos

Pipelines (Canalizadores)

AWK - Introdução

Leitura recomendada

Backup automático em Shell Script

Shell Script 1 - Básico

Simples e rápido: matando todos os processos de um usuário

Introduzindo um pouco mais a fundo o shell script

Recursos avançados do bash que você não aprende na escola

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts