使用Bash计算string中字符的出现次数

我需要使用Bash来计算string中char的出现次数

在下面的例子中,当char是(例如) t ,它会在var echo t的正确出现次数,但是当该字符是逗号或分号时,它会打印出零:

 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分割string,并打印结果字段的数量减1。

如果您的shell不支持<<<运算符,请使用echo

 echo "${string}" | awk -F"${char}" '{print NF-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" 

你可以通过组合trwc命令来完成。 例如,要计算stringreferee e

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

产量

 4 

说明:命令tr -cd 'e'删除除“e”以外的所有字符,而命令wc -c对剩余的字符进行计数。

多行input也适用于此解决scheme,如命令cat mytext.txt | tr -cd 'e' | wc -c cat mytext.txt | tr -cd 'e' | wc -c cat mytext.txt | tr -cd 'e' | wc -c可以统计文件mytext.txt e ,甚至认为该文件可能包含很多行。

如果你的服务器拥有它,awk就可以工作

 var="text,text,text,text" num=$(echo "${var}" | awk -F, '{print NF-1}') echo "${num}"