我正在尝试执行一个shell脚本,我需要将一个看起来像这样的字符串:“00001”转换成一个看起来像这样的字符串;“1”并去掉左边的所有零..
任何想法如何以最简单的方式做到这一点?
谢谢!
我正在尝试执行一个shell脚本,我需要将一个看起来像这样的字符串:“00001”转换成一个看起来像这样的字符串;“1”并去掉左边的所有零..
任何想法如何以最简单的方式做到这一点?
谢谢!
像这样?
kent$ echo "000001"|awk '{$0*=1}1'
1
或通过替换:
kent$ echo "000001"|sed 's/^0*//'
1
使用 bash 内置:
> echo $((0000000001))
1
如果您使用大于 7 的数字,它们将被解释为八进制,因此您需要明确指定以 10 为基数:
> 值=00010 > 回声 $((val)) 8 > 回声 $((10#$val)) 10
回声“00001” | sed 's/0*//' 将返回“1”。s/ 表示搜索和替换,它搜索 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}"