如何計算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