0

我正在尝试执行一个shell脚本,我需要将一个看起来像这样的字符串:“00001”转换成一个看起来像这样的字符串;“1”并去掉左边的所有零..

任何想法如何以最简单的方式做到这一点?

谢谢!

4

4 回答 4

2

像这样?

kent$  echo "000001"|awk '{$0*=1}1'
1

或通过替换:

kent$  echo "000001"|sed 's/^0*//' 
1
于 2013-05-08T21:16:55.053 回答
1

使用 bash 内置: 

> echo $((0000000001))
1

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

    > 值=00010
    > 回声 $((val))
    8
    > 回声 $((10#$val))
    10
于 2013-05-08T21:20:47.863 回答
1

回声“00001” | sed 's/0*//' 将返回“1”。s/ 表示搜索和替换,它搜索 0 并将它们替换为空。

于 2013-05-08T21:22:58.387 回答
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}"
于 2013-05-08T21:19:25.497 回答