148

Bash を使用して、文字列内の char の出現回数をカウントする必要があります。

次の例では、文字が (たとえば)t場合、 inの正しい出現回数ですが、文字がコンマまたはセミコロンの場合はゼロが出力されます。echotvar

var = "text,text,text,text" 
num = `expr match $var [,]`
echo "$num"
4

9 に答える 9

125

次のawkコマンドを使用します。

string="text,text,text,text"
char=","
awk -F"${char}" '{print NF-1}' <<< "${string}"

文字列を分割して$char、結果のフィールド数から 1 を引いた数を出力します。

<<<シェルが演算子をサポートしていない場合は、次を使用しechoます。

echo "${string}" | awk -F"${char}" '{print NF-1}'
于 2013-05-21T21:05:01.207 に答える
91

trwcコマンドを組み合わせて実行できます。たとえばe、文字列でカウントするには referee

echo "referee" | tr -cd 'e' | wc -c

出力

4

説明: Commandtr -cd 'e'は「e」以外のすべての文字を削除し、Commandwc -cは残りの文字をカウントします。

cat mytext.txt | tr -cd 'e' | wc -ccommand can counts ein the file のように、ファイルmytext.txtに多くの行が含まれている場合でも、複数行の入力もこのソリューションに適しています。

*** アップデート ***

数字 (@tom10271) の複数のスペースを解決するには、単にパイプされた tr コマンドを追加します。

 tr -d ' '

例えば:

echo "referee" | tr -cd 'e' | wc -c | tr -d ' '
于 2016-12-13T10:49:08.210 に答える
4

awk は非常に優れていますが、シンプルにしない理由はありません。

num=$(echo $var | grep -o "," | wc -l)
于 2021-02-26T16:21:22.733 に答える