查找并替换一行文本中的值

查找并替换一行文本中的值

我有一个仅包含 1 行文本的文本文件

1314:Battery:1.90:50:30

我试图弄清楚是否有办法执行 agrep并将sed值 50 和 30 更改为以下值

1314:Battery:1.90:45:35

我将从 50 减少 5,从 30 增加 5。

请指导我是否有更好的方法来解决这个问题?我刚刚开始学习这个脚本。谢谢=)

答案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扩展(asinplace或),有人可能已经在其中植入了恶意软件。随系统提供的扩展inplace.awk的路径可能会有所不同,请参阅输出inplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

相关内容