sed, parte II: Enviando dados pro sed

parte I: O que é e para que serve
parte II: Enviando dados pro sed
parte III: Selecionando as linhas em que vamos trabalhar
parte IV: Substituindo
parte V: Scripts em sed
parte VI: Expressões Regulares
parte VII: Referenciando com &
parte VIII: Back Reference
parte IX: Hold Space ou Espaço Reserva
parte X: Por onde prosseguir e Considerações Finais
parte XI: Comandos de uma linha só




Vamos usar o arquivo /etc/passwd, nativo do Linux.
Caso não esteja, use outro arquivo de texto qualquer.
Para para 'trazer' os dados pro terminal digite:
cat /etc/passwd

Agora vamos passar esse arquivo pro sed através da 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, pois o sed age em todas as linhas.
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.
Dessa 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, apenas por questão de organização.

Nenhum comentário: