回答:
次の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