计算字符串中的点数

Cha*_*lie 13 bash

如何计算BASH中字符串中的点数?例如

VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"

# Variable VAR contains 5 dots
Run Code Online (Sandbox Code Playgroud)

Ros*_*nko 16

你可以组合grepwc命令:

echo "string.with.dots." | grep -o "\." | wc -l
Run Code Online (Sandbox Code Playgroud)

说明:

grep -o   # will return only matching symbols line/by/line
wc -l     # will count number of lines produced by grep
Run Code Online (Sandbox Code Playgroud)

或者您只能grep用于此目的:

echo "string.with.dots." | grep -o "\." | grep -c "\."
Run Code Online (Sandbox Code Playgroud)


per*_*eal 6

VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
echo $VAR | tr -d -c '.' | wc -c
Run Code Online (Sandbox Code Playgroud)

tr -d从输入中删除给定的字符.-c采用给定字符的倒数.这个表达式一起删除非'.' 字符并使用计算结果长度wc.


rus*_*ush 6

纯粹的解决方案bash:

VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd" 
VAR_TMP="${VAR//\.}" ; echo $((${#VAR} - ${#VAR_TMP}))
Run Code Online (Sandbox Code Playgroud)

甚至只是作为chepner提到的:

VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd" 
VAR_TMP="${VAR//[^.]}" ; echo ${#VAR_TMP}
Run Code Online (Sandbox Code Playgroud)

  • 或者`DOTS = $ {VAR_TMP // [^.]}; echo $ {#DOTS}`. (5认同)

Tho*_*hor 6

awk 替代方案:

echo "$VAR" | awk -F. '{ print NF - 1 }'
Run Code Online (Sandbox Code Playgroud)

输出:

5
Run Code Online (Sandbox Code Playgroud)