найти и заменить значение в строке текста

найти и заменить значение в строке текста

У меня есть текстовый файл, содержащий только одну строку текста.

1314:Battery:1.90:50:30

Я пытаюсь выяснить, можно ли как-то grepизменить sedзначения 50 и 30 на следующие

1314:Battery:1.90:45:35

я бы уменьшил 50 на 5 и увеличил 5 с 30.

Пожалуйста, подскажите, есть ли лучший способ решить эту проблему? Я только начал изучать этот скриптинг. Спасибо =)

решение1

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

Выход:

1314:Батарея:1.90:45:35

решение2

С perl:

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

С помощью sh(предполагая, что эти числа всегда являются десятичными целыми числами без начальных нулей):

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

В последних версиях GNU awk:

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

Не использовать-i inplaceas сначала gawkпытается загрузить inplaceрасширение (как inplaceили inplace.awk) из текущего рабочего каталога, где кто-то мог разместить вредоносное ПО. Путь расширения, inplaceпоставляемого с, gawkможет различаться в зависимости от системы, см. выводgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

Связанный контент