SHELL去掉字符串左边的所有零

SHELL去掉字符串左边的所有零,shell,Shell,我正在尝试执行一个shell脚本,其中我需要将一个如下所示的字符串:“00001”转换为如下所示的字符串;“1”并去掉左边的所有零 有没有办法用最简单的方法做到这一点 谢谢 像这样 kent$ echo "000001"|awk '{$0*=1}1' 1 或通过替换: kent$ echo "000001"|sed 's/^0*//' 1 像这样 kent$ echo "000001"|awk '{$0*=1}1' 1 或通过替换: kent$ echo "000001"|sed

我正在尝试执行一个shell脚本,其中我需要将一个如下所示的字符串:“00001”转换为如下所示的字符串;“1”并去掉左边的所有零

有没有办法用最简单的方法做到这一点

谢谢

像这样

kent$  echo "000001"|awk '{$0*=1}1'
1
或通过替换:

kent$  echo "000001"|sed 's/^0*//' 
1
像这样

kent$  echo "000001"|awk '{$0*=1}1'
1
或通过替换:

kent$  echo "000001"|sed 's/^0*//' 
1

一个选项是使用带有参数扩展的
#
运算符。您需要首先启用扩展glob支持(使其成为非POSIX),因为基本模式的功能不足以匹配字符串0

$ shopt -s extglob
$ foo="000001"
$ echo "${foo##+(0)}"
1
$ bar=${foo##+(0)}
$ echo "$foo -- $bar"
000001 -- 1
另一个非POSIX选项是替换运算符。这不需要扩展模式支持

$ echo "${foo//#0}"

一个选项是使用带有参数扩展的
#
运算符。您需要首先启用扩展glob支持(使其成为非POSIX),因为基本模式的功能不足以匹配字符串0

$ shopt -s extglob
$ foo="000001"
$ echo "${foo##+(0)}"
1
$ bar=${foo##+(0)}
$ echo "$foo -- $bar"
000001 -- 1
另一个非POSIX选项是替换运算符。这不需要扩展模式支持

$ echo "${foo//#0}"
使用bash内置的:

> echo $((0000000001))
1
如果使用大于7的数字,它们将被解释为八进制,因此需要明确指定以10为基数:

> val=00010 > echo $((val)) 8 > echo $((10#$val)) 10 >val=00010 >echo$((val)) 8. >echo$((10#$val)) 10 使用bash内置的:

> echo $((0000000001))
1
如果使用大于7的数字,它们将被解释为八进制,因此需要明确指定以10为基数:

> val=00010 > echo $((val)) 8 > echo $((10#$val)) 10 >val=00010 >echo$((val)) 8. >echo$((10#$val)) 10
echo“00001”| sed的s/0*/'将返回“1”。s/表示搜索和替换,它搜索0并将其替换为零。

echo“00001”| sed的s/0*/'将返回“1”。s/意味着搜索和替换,它搜索0并将其替换为零。

got it;):回显“00001”| sed's/0*/',将
205
转换为
25
。可能不是你的意思。你的不安全,用
2000000
试试,你会看到。不,它有效;这个人说:用替换字符串替换模式空间中正则表达式的第一个实例。明白了;):回显“00001”| sed's/0*/',将
205
转换为
25
。可能不是你的意思。你的不安全,用
2000000
试试,你会看到。不,它有效;这个人说:用替换字符串替换模式空间中正则表达式的第一个实例。你试过这个吗
${foo##0}
删除第一个0,留下
00001
也许你的意思是
${foo##*0}
,但这将删除最后一个0之前的所有内容,因此它将
00102
更改为
2
。我犯这个错误的次数比我愿意承认的次数还要多。您需要启用扩展全局支持。您尝试过这个吗
${foo##0}
删除第一个0,留下
00001
也许你的意思是
${foo##*0}
,但这将删除最后一个0之前的所有内容,因此它将
00102
更改为
2
。我犯这个错误的次数比我愿意承认的次数还要多。您需要启用扩展的全局支持