如何使用数学运算替换字符串

如何使用数学运算替换字符串

我有一个 gcode 文件,我需要从 Z 的每个值中减去 101.54。格式为[Z]:[0-9]*.[0-9]*

我该如何使用sed或其他Linux工具来进行操作?

就像:Z:101.6最终会被更改为Z:0.06.

提前致谢

答案1

$ echo "Z:101.6" | perl -p -e 's/Z:(\d+(?:\.\d+)?)/sprintf("Z:%.2f",$1-101.54)/eg'
Z:0.06

这使用 perl 的/e正则表达式修饰符来评估运算符右侧的表达式s///。它将在 之后处理整数和浮点数Z:,并将替换全部匹配它在输入行中任何位置找到的模式。

答案2

这是一项任务awk

awk 'BEGIN{FS=OFS=":"}{$2-=101.54;print}'
  • BEGIN{FS=OFS=":"}将输入和输出字段分隔符设置为冒号。
  • {$2-=101.54;print}对于每一行,从第二个字段中减去 101.54 并打印
  • 如果需要,您可以使用 or so 限制行$1=="Z"{...},但是您必须使print命令全局化(否则您将省略所有行不是参考Z),如
    $1=="Z"{$2-=101.54} 1
    
    或者
    $1=="Z"{$2-=101.54} {print}
    

例子:

$ echo 'Z:101.6' | awk 'BEGIN{FS=OFS=":"}{$2-=101.54;print}'
Z:0.06

相关内容