Usando variáveis para alterar arquivos com sed, *grep e outros
Dica publicada em Shell Script / Variáveis
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!
$ 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!
No meu próximo script eu vou testar isso ;)