Como substituir uma linha em qualquer arquivo de texto

Iniciado por BIGBRUNO, 30 de Maio de 2006, 06:48

tópico anterior - próximo tópico

BIGBRUNO

Editei o post pq o Julio Neves viu em uma lista que enviei isso e fez várias melhorias, o código agora ficou bem mais otimizado :)

Uma tarefa que costuma ser bastante chata é modificar uma linha ou mais linhas de um arquivo de configuração usando shell script, porém existe uma solução fácil, veja o exemplo:

Vamos modificar o valor da variável Size de 4 para 10 do arquivo abaixo supondo que esse arquivo é o /etc/biglinux

Código:
Position=3
Size=4
SizePercentage=100
Name=BigLinux


Basta usar a seguinte linha na shell:

Código:
sed -i 's/^Size=.*/Size=15/' /etc/biglinux


O ^Size= Especifica que é para alterar apenas a linha que começar com Size= o .* especifica que é para apagar toda a linha e o Size=15 é o que deve ser escrito no lugar do que estava antes.

O primeiro /etc/biglinux diz ao sed qual o arquivo que ele deve ler, e o -i diz que é para alterar esse mesmo arquivo e não apenas exibir na tela.

O sed aceita adicionar várias modificações em série, sem precisar salvar varias vezes, veja no exemplo:

Código:
sed -i 's/^Size=.*/Size=50/;s/^Name=.*/Name=Bruno/;s/^Position=.*/Position=55/' /etc/biglinux


Espero que seja útil para vocês e se souberem de alguma forma mais simples que divulgue-a.

Agradeço ao Julio Neves que ajudou a melhorar esse script em sed que foi apresentado Smile

Um bom guia de SED em português para quem quiser se aprofundar nesse programa http://sed.sourceforge.net/sed1line_pt-BR.html

denisbr


malakl

Hehehe parece q vcs leram meus pensamentos tava precisando de algo parecido um dia desses.

Valews

"O que eu espero senhores, é que depois de um razoável período de discussão, todo mundo concorde comigo" Winston Churchill

JarbasAugusto

por exemplo,

tem como no campo q for alterar mandar a informação de data e hora atuais?
Exemplo:

Código:
Name=teste.mp4
Size=4
SizePercentage=100
TESTE=BigLinux

Ficar assim:
Name=DD-MM-AAAA-HH-MM.mp4
Size=4
SizePercentage=100
TESTE=BigLinux


mailson

Citação de: JarbasAugusto online 19 de Setembro de 2007, 15:33
tem como no campo q for alterar mandar a informação de data e hora atuais?

Veja man date que você acha a resposta para a sua dúvida.

Eu acho bom também estudar um pouco sobre Expressões Regulares caso queira se aprofundar melhor no sed
Um ótimo link para aprender e consultar é o guia do aurélio. Você pode também comprar o livro dele se preferir.

JarbasAugusto

obrigado brother
vou pesquisar e posto minhas tentativas!!