我有一个 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