shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Ajuda com o "sed" para substituir um determinado trecho de um txt em um


From: andelnyr
Subject: Ajuda com o "sed" para substituir um determinado trecho de um txt em um arquivo.
Date: Wed, 23 Feb 2011 17:09:41 -0000
User-agent: eGroups-EW/0.82

Prezados

Montei uma giga para testar multimedidores e como tenho de testar um monte de 
equipamentos, eu conecto 5 aparelhos de cada vez na giga e com base em um 
arquivo de configuração eu injeto valores e vejo o funcionamento.

O arquivo é:

cat config.txt

mmed1 1 145 600 590 610 -120 60 0 1 0 1 1 OFF 100 
mmed2 1 144 585 590 595 -10 60 0 1 0 1 1 OFF 110 
mmed3 0 142 320 310 320 -25 59 0 1 0 1 1 OFF 100 
mmed4 1 145 120 121 121 -53 60 0 1 0 1 1 ON 100
mmed5 0 345 10 9 21 47 60 0 1 0 1 1 ON 101

Para não ter de ficar mudando isso com editor de textos e salvar, fiz um 
pequeno script para alterar qualquer valor do arquivo em qualquer posição "on 
the fly" – é o altera_config.sh.

O uso é:

./altera_config.sh <nome_do_equipamento> <id_da_coluna> <valor_a_ser_inserido>

O script é:

cat altera_config.sh

#!/bin/bash
linha=( $(grep $1 config.txt) )
linha["$2"]="$3"
sed -i s/"${linha[0]}".*/"${linha[*]}"/g config.txt

Tudo bem, funciona – mas o script lê uma linha, transforma em vetor, identifica 
o valor a ser modificado e o faz diretamente no arquivo config.txt.

Mas o que me incomoda é que eu necessariamente não preciso ler uma linha para 
modificar o valor – bastaria modificar o valor na coluna indicada, preservando 
os demais valores e pronto!

Estou buscando produzir uma linha em sed que fizesse o que proponho, mas só 
consegui chegar até aqui – para alterar o valor referente ao mmed2 na quinta 
coluna para "XXX", eu fiz:

sed -i 's/(mmed2)(\s[0-9a-zA-Z]{1,3}){4}/\1\2XXX/g' config.txt 

E como poderão perceber, não tive êxito.

É possível fazer isso somente com o sed? Gostaria de alguma orientação para 
este caso.

Desde já agradeço.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]