Bash 如何在第一个非零数字之前计算所有零

Bash 如何在第一个非零数字之前计算所有零,bash,shell,awk,grep,Bash,Shell,Awk,Grep,这就是问题所在: echo -0.00092711066827 | grep -o 0 0 0 0 0 0 echo -0.00092711066827 | grep -o 0 | wc -l 5 但我需要在第一个非零数字之前计算所有零,在本例中,在数字9之前计算所有零(例如,4个零)。知道如何计算这4个零加上第一个非零整数(在本例中是4个零加9)也很好 欢迎提示,您可以这样做 $ printf '%e\n' -0.00092711066827 | sed 's/^.\+e-//' 04

这就是问题所在:

echo -0.00092711066827 | grep -o 0

0
0
0
0
0

echo -0.00092711066827 | grep -o 0 | wc -l

5
但我需要在第一个非零数字之前计算所有零,在本例中,在数字9之前计算所有零(例如,4个零)。知道如何计算这4个零加上第一个非零整数(在本例中是4个零加9)也很好

欢迎提示,

您可以这样做

$ printf '%e\n' -0.00092711066827 | sed 's/^.\+e-//'
04
$ echo -0.00092711066827 | grep -o '^[^1-9]\+' | grep -o '0' | wc -l
4
你可以这样做

$ echo -0.00092711066827 | grep -o '^[^1-9]\+' | grep -o '0' | wc -l
4
对于bash:

x='-0.00092711066827'
[[ $x =~ ([0.]+).* ]]
y="${BASH_REMATCH[1]//./}"
echo "${#y}"
输出:

4 4. 对于bash:

x='-0.00092711066827'
[[ $x =~ ([0.]+).* ]]
y="${BASH_REMATCH[1]//./}"
echo "${#y}"
输出:

4 4. 两种外壳解决方案(无外部程序):

两种外壳解决方案(无外部程序):


感谢Ignacio,我得到了
bash:printf:-0.00092711066827:无效数字0000000 e+00
,然后告诉
printf
使用以句点为基点的区域设置
LC\u NUMERIC=en\u US printf…
谢谢Ignacio,我得到了
bash:printf:-0.00092711066827:无效数字0000000 e+00
然后告诉
printf
使用以句点为基点的区域设置<代码>LC_NUMERIC=en_US printf…