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!