Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: kurumin-emu
Por humbhenri
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Usando variáveis para alterar arquivos com sed, *grep e outros
Linux user
Publicado por Davidson Rodrigues Paulo em 21/04/2006

Login: davidsonpaulo, 2663470 pontos | Blog: http://davidsonpaulo.com/
[ Hits: 8657 ]

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

Leitura recomendada
   Dica Linux recomendada DictConv: Converta dicionários do Babylon para o StarDict
   Dica Linux recomendada Variáveis compostas em shell script
   Dica Linux recomendada Economize energia, um bem precioso
   Dica Linux recomendada Variável de numero inteiro ou float
   Dica Linux recomendada Como exibir números com um largura fixa de caracteres, complentando com zeros a esquerda

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


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.