Как насчет s / \ ([0-9] + \) /./ g; s / ^ \. | \. $ // g
?
Ваша конструкция \ d
не будет распознаваться некоторыми реализациями sed. Вышеупомянутое расширенное регулярное выражение Posix. Как вы знаете, должно работать .
Уловка в sed
заключается в том, чтобы работать постепенно. Вы добились этого, заменив цифры в скобках; вы просто не понимали, что можете очистить результат с помощью второго регулярного выражения.
С 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 inplace -F: -vOFS=: '{$4-=5;$5+=5}1' the-file
awk -F":" '{OFS=":"; print $1,$2,$3,$4-5,$5+5}' filename
Выход:
1314:Battery:1.90:45:35