计算 bash 变量中的位数
Count the number of digits in a bash variable
我有一个号码num=010
。我想计算这个数字中包含的位数。如果位数超过一定数量,我想做一些处理。
在上面的例子中,位数是3。
谢谢!
在BASH中你可以这样做:
num='a0b1c0d23'
n="${num//[^[:digit:]]/}"
echo ${#n}
5
使用 awk 你可以做到:
num='012'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
3
num='00012'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
5
num='a0b1c0d'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
3
假设变量x是问题中的"certain number"
chars=`echo -n $num | wc -c`
if [ $chars -gt $x ]; then
....
fi
假设变量只包含数字,那么 shell 已经用长度 Shell Parameter Expansion.
做了你想要的
$ var=012
$ echo "${#var}"
3
这适用于混合了数字和非数字的任意字符串:
ndigits=`echo $str | grep -P -o '\d' | wc -l`
演示:
$ echo sf293gs192 | grep -P -o '\d' | wc -l
6
使用sed
:
s="string934 56 96containing digits98w6"
num=$(echo "$s" |sed 's/[^0-9]//g')
echo ${#num}
10
使用grep
:
s="string934 56 96containing digits98w6"
echo "$s" |grep -o "[0-9]" |grep -c ""
10
我有一个号码num=010
。我想计算这个数字中包含的位数。如果位数超过一定数量,我想做一些处理。
在上面的例子中,位数是3。
谢谢!
在BASH中你可以这样做:
num='a0b1c0d23'
n="${num//[^[:digit:]]/}"
echo ${#n}
5
使用 awk 你可以做到:
num='012'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
3
num='00012'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
5
num='a0b1c0d'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
3
假设变量x是问题中的"certain number"
chars=`echo -n $num | wc -c`
if [ $chars -gt $x ]; then
....
fi
假设变量只包含数字,那么 shell 已经用长度 Shell Parameter Expansion.
做了你想要的$ var=012
$ echo "${#var}"
3
这适用于混合了数字和非数字的任意字符串:
ndigits=`echo $str | grep -P -o '\d' | wc -l`
演示:
$ echo sf293gs192 | grep -P -o '\d' | wc -l
6
使用sed
:
s="string934 56 96containing digits98w6"
num=$(echo "$s" |sed 's/[^0-9]//g')
echo ${#num}
10
使用grep
:
s="string934 56 96containing digits98w6"
echo "$s" |grep -o "[0-9]" |grep -c ""
10