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
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
dot_count=$(IFS=.; set $VAR; echo $(($# - 1)))
これはにフィールドセパレータを設定することによって動作します ""サブシェルで文字列を単語分割することで位置パラメータを設定します。 Nドットの場合、N + 1の位置パラメータがあります。サブシェル内の位置パラメータの数から1つを減算し、捕捉することをdot_count
にエコーすることで終了します。
これは、先頭と末尾のドットを削除します。 – nneonneo
awk
代替:
echo "$VAR" | awk -F. '{ print NF - 1 }'
出力:
5
が一時的IFS
、純粋バッシュ、無サブプロセスを設定:
IFS=. VARTMP=(X${VAR}X) # avoid stripping dots
echo $((${#VARTMP[@]} - 1))
出力:
5
[bashを使用して文字列内のcharのカウント数]の可能な複製(http://stackoverflow.com/questions/16679369/count-occurrences-of-char-in-string-using-bash) –