Usando variáveis para alterar arquivos com sed, *grep e outros

Publicado por Davidson Rodrigues Paulo em 21/04/2006

[ Hits: 17.406 ]

Blog: http://davidsonpaulo.com/

 


Usando variáveis para alterar arquivos com sed, *grep e outros



Quem usa Linux e programa em Shell Script com certeza já precisou fazer alguma alteração num arquivo usando interpretadores de expressões regulares como sed, egrep e outros. Entretanto, esses comandos não possuem a função de aplicar modificações no arquivo de origem (as versões mais recentes do sed possuem essa função) e, em todos os lugares onde eu procurei uma orientação sobre o que fazer, a recomendação era de criar um outro arquivo e então substituir o arquivo antigo pelo outro. Algo assim:

$ sed [comando] [arquivo] > [arquivo].new
$ mv [arquivo].new [arquivo]


Bom, acontece que eu acabei descobrindo um jeito de fazer a mesma coisa sem criar nenhum novo arquivo. Basta usar variáveis de ambiente. Isso mesmo. Veja como poderíamos fazer a mesma coisa acima citada usando essa técnica:

$ TEXTO=`sed [comando] [arquivo]`
$ echo "$TEXTO" > [arquivo]


A grande vantagem desse método é a maior velocidade que se ganha, já que as variáveis ficam armazenadas em memória, sendo manipuladas muito mais rapidamente do que arquivos armazenados em disco.

Você pode ver um exemplo prático de aplicação dessa técnica no script de instalação que eu desenvolvi para o pacote para Slackware do Squid. Esse script atualiza o arquivo /etc/rc.d/rc.M, inserindo uma entrada para a inicialização em tempo de boot do Squid.

Eu usei o sed no exemplo, mas poderia ter usado qualquer outro programa. O procedimento é o mesmo para outros comandos.

Agradecimentos ao amigo Elias que me apontou uma pequena falha que eu estava cometendo nesse procedimento. Valeu Elias!

Outras dicas deste autor

Remover rodapé dos erros do Squid sem recompilar

Recuperando base de dados do RPM

Como desmontar um compartilhamento NFS travado

Lançado livro sobre OpenOffice

Fazendo o rpm voltar a funcionar depois de remover o sqlite

Leitura recomendada

Site com várias dicas de ajuda para shell script

Como exibir números com um largura fixa de caracteres, complentando com zeros a esquerda

Operações matemáticas diretamente pelo bash

Nome de arquivo com espaço dentro de variáveis

Arrays no BASH

  

Comentários
[1] Comentário enviado por jose_maria em 21/04/2006 - 22:38h

Boa idéia!
No meu próximo script eu vou testar isso ;)

[2] Comentário enviado por PCMasterPB em 22/04/2006 - 20:38h

O link do script de exemplo está quebrado ou errado, não sei ao certo, mas o que interessa é que está inacessível. Eu gostaria de ver o script. Mas a dica é boa. Té mais. ;D

[3] Comentário enviado por fabricio_ em 24/04/2006 - 09:27h

no sed :
sed -i

man sed :

-i[SUFFIX], --in-place[=SUFFIX]

edit files in place (makes backup if extension supplied)

sed --version
GNU sed version 4.1.4
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.




[4] Comentário enviado por davidsonpaulo em 24/04/2006 - 10:30h

PCMasterPB,

Acabei de checar o link, e descobri algo muito chato: o servidor onde está hospedado o Bozolinux (e o script de exemplo) não foi pago pelo patrocinador e ele está fora do ar... =( Vou ter que correr atrás do lucro e ver como posso voltar a situação ao normal.

fabricio_,

Sim, esqueci de mencionar na dica que algumas versões do sed (as mais recentes) possuem a opção -i que pode ser usada para gravar no arquivo.

Abraços

[5] Comentário enviado por sampaioprimo em 14/06/2006 - 11:06h

olá, estou acostumado a usar o awk. alguém saberia me dizer se esta linguagem possui alguma opção semelhante ao -i mencionado para o sed? obrigado, rodrigo.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts