使用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"
你可以通过组合tr
和wc
命令来完成。 例如,要计算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}"