Bash を使用して、文字列内の char の出現回数をカウントする必要があります。
次の例では、文字が (たとえば)のt
場合、 inの正しい出現回数ですが、文字がコンマまたはセミコロンの場合はゼロが出力されます。echo
t
var
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 -c
command can counts e
in 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)