encontre e substitua um valor em uma linha de texto

encontre e substitua um valor em uma linha de texto

Eu tenho um arquivo de texto que contém apenas 1 linha de texto

1314:Battery:1.90:50:30

Estou tentando descobrir se existe alguma maneira de fazer um grepe sedalterar o valor 50 e 30 para o seguinte

1314:Battery:1.90:45:35

que eu reduziria 5 de 50 e aumentaria 5 de 30.

Por favor, me oriente se existe uma maneira melhor de resolver esse problema? Acabei de começar a pegar esse script. Obrigado =)

Responder1

awk -F":" '{OFS=":"; print $1,$2,$3,$4-5,$5+5}' filename

Saída:

1314: Bateria: 1,90:45:35

Responder2

Com perl:

perl -i -F: -lape '$F[3]-=5;$F[4]+=5;$_=join ":",@F' the-file

Com sh(assumindo que esses números são sempre inteiros decimais sem zeros à esquerda):

IFS=: read -r a b c d e < the-file &&
  printf '%s\n' "$a:$b:$c:$((d-5)):$((e+5))" > the-file

Com versões recentes do GNU awk:

gawk -i /usr/share/awk/inplace.awk -F: -vOFS=: '{$4-=5;$5+=5}1' the-file

Não use-i inplaceas gawktenta carregar primeiro a inplaceextensão (como inplaceou inplace.awk) do diretório de trabalho atual, onde alguém poderia ter plantado malware. O caminho da inplaceextensão fornecida gawkpode variar de acordo com o sistema, consulte a saída degawk 'BEGIN{print ENVIRON["AWKPATH"]}'

informação relacionada