作为 makefile 配方的一部分,我想重复调整某些文本文件中的几行txt.in
。特别是,我想更新第三行,其中仅包含两个由空格分隔的数字。它们的格式应为0.00 0.00
.因此,我在我的 makefile 中包含了下面的代码来测试我是否可以做到这一点。
# Makefile to test for-loop
SHELL=/bin/zsh
for:
for k in 1 2 3; do \
let n="$$k*0.25"; \
let m="$$n+0.25"; \
sed -i "3s/.*/$$n $$m/" txt.in; \
done
这0.7500000000 1.0000000000
就是最终结果。可能有更有效的方法来做到这一点,我很乐意了解这些,但我真正想知道的是是否有一种方法可以使格式正确。
答案1
通过管道输出
sed 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g'
以获得所需的格式。实际上,您的sed
声明将更改为:
sed -i "3s/.*/$$n $$m/" txt.in | sed -i 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g' txt.in; \
答案2
您也可以使用printf
.即使您的 shell 不提供整数,这也会为您提供零填充:
o="$(printf "%.2f\n" "$$m")"
p="$(printf "%.2f\n" "$$n")"
sed -i "3s/.*/$$o $$p/" txt.in;