2012-08-14 14 views
11

BASHの文字列のドット数はどのように数えますか?例えば文字列のドット数を数える

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

# Variable VAR contains 5 dots 
+0

[bashを使用して文字列内のcharのカウント数]の可能な複製(http://stackoverflow.com/questions/16679369/count-occurrences-of-char-in-string-using-bash) –

答えて

5
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を使用してカウントされます。

12

あなたはそれがgrepwcコマンドを組み合わせて行うことができます。

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 "\." 
6

ソリューション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} 
+5

またはDOTS = $ {VAR_TMP // [^。]}; echo $ {#DOTS} '。 – chepner

1
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にエコーすることで終了します。

+0

これは、先頭と末尾のドットを削除します。 – nneonneo

6

awk代替:

echo "$VAR" | awk -F. '{ print NF - 1 }' 

出力:

2
5 

が一時的IFS、純粋バッシュ、無サブプロセスを設定:

IFS=. VARTMP=(X${VAR}X) # avoid stripping dots 
echo $((${#VARTMP[@]} - 1)) 

出力:

5 
関連する問題