回答:
次の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}'
$(grep -o "$needle" < filename | wc -l)
wc -l、ただ使うだけでgrep -c、それはbsd grepとlinux grepの両方で動作します。
grep -cは一致する行の数のみを出力します。1行あたりの複数の一致はカウントされません。
たとえば、次のように他のすべての文字を削除して、残っているものを数えることができます。
var="text,text,text,text"
res="${var//[^,]}"
echo "$res"
echo "${#res}"
印刷します
,,,
3
または
tr -dc ',' <<<"$var" | awk '{ print length; }'
または
tr -dc ',' <<<"$var" | wc -c #works, but i don't like wc.. ;)
または
awk -F, '{print NF-1}' <<<"$var"
または
grep -o ',' <<<"$var" | grep -c .
または
perl -nle 'print s/,//g' <<<"$var"
y="${x//[^s|S]}"; echo "${#y}"
wcじゃないの?ゴルフ!
echo -n some line | wc -l
tr -dc ',' <<<"$var" | wc -c
trとwcコマンドを組み合わせて実行できます。たとえばe、文字列を数えるには referee
echo "referee" | tr -cd 'e' | wc -c
出力
4
説明:コマンドtr -cd 'e'は「e」以外のすべての文字を削除し、コマンドwc -cは残りの文字をカウントします。
複数行の入力もこのソリューションに適しています。たとえば、ファイルに多数の行が含まれている場合でも、command cat mytext.txt | tr -cd 'e' | wc -cがeファイル内mytext.txtでカウントできるようになります。
あなたのサーバーにawkがあればうまくいきます
var="text,text,text,text"
num=$(echo "${var}" | awk -F, '{print NF-1}')
echo "${num}"
awk -F,探し,ます。あなたは、次の操作を行うことができますawk -F"${your_char}"
これもチェックしてください。たとえば、 t
echo "test" | awk -v RS='t' 'END{print NR-1}'
または python
python -c 'print "this is for test".count("t")'
またはさらに良いことに、スクリプトを動的にすることができます awk
echo 'test' | awk '{for (i=1 ; i<=NF ; i++) array[$i]++ } END{ for (char in array) print char,array[char]}' FS=""
この場合、出力は次のようになります。
e 1
s 1
t 2