如何计算BASH中字符串中的点数?例如计算字符串中的点数
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
# Variable VAR contains 5 dots
如何计算BASH中字符串中的点数?例如计算字符串中的点数
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
# Variable VAR contains 5 dots
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
echo $VAR | tr -d -c '.' | wc -c
TR -d
删除从输入给定的字符。 -c
取给定字符的倒数。一起,这个表达式删除非'。'字符并使用wc
来计算所得长度。
你可以做到这一点结合grep
和wc
命令:
echo "string.with.dots." | grep -o "\." | wc -l
说明:
grep -o # will return only matching symbols line/by/line
wc -l # will count number of lines produced by grep
或者你也可以只使用grep
用于这一目的:
echo "string.with.dots." | grep -o "\." | grep -c "\."
纯解决方案bash
:
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
VAR_TMP="${VAR//\.}" ; echo $((${#VAR} - ${#VAR_TMP}))
,甚至只是作为chepner提到:
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
VAR_TMP="${VAR//[^.]}" ; echo ${#VAR_TMP}
或者'DOTS = $ {VAR_TMP // [^]}; echo $ {#DOTS}'。 – chepner 2012-08-14 14:32:56
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
dot_count=$(IFS=.; set $VAR; echo $(($# - 1)))
这通过设置字段分隔符 “”在一个子shell中,并通过对字符串进行分词来设置位置参数。用N个点,将会有N + 1个位置参数。我们通过从子外壳中的位置参数数量中减去1来完成,并回显在dot_count
中捕获的数据。
这将去掉前导点和尾点。 – nneonneo 2012-10-20 23:57:46
awk
替代:
echo "$VAR" | awk -F. '{ print NF - 1 }'
输出:
5
暂时设定IFS
,纯击,没有子过程:
IFS=. VARTMP=(X${VAR}X) # avoid stripping dots
echo $((${#VARTMP[@]} - 1))
输出:
5
[使用bash在字符串中计数字符数的可能的重复](http://stackoverflow.com/questions/16679369/count-occurrences-of-char-in-string-using-bash) – 2015-11-19 23:16:33