[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.
- Ajuda com o "sed" para substituir um determinado trecho de um txt em um arquivo.,
andelnyr <=