Bash を使用して、文字列内の char の出現回数をカウントする必要があります。
次の例では、文字が (たとえば)のt場合、 inの正しい出現回数ですが、文字がコンマまたはセミコロンの場合はゼロが出力されます。echotvar
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
次の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}'
trとwcコマンドを組み合わせて実行できます。たとえば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 ' '
awk は非常に優れていますが、シンプルにしない理由はありません。
num=$(echo $var | grep -o "," | wc -l)