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

时间:2013-05-21 20:57:34

标签: bash shell sh

我需要使用Bash计算字符串中出现次数

在以下示例中,当char(例如)t时, echo s tvar的正确出现次数var = "text,text,text,text" num = `expr match $var [,]` echo "$num" 1}},但是当字符是逗号或分号时,它会打印出零:

{{1}}

8 个答案:

答案 0 :(得分:90)

我会使用以下awk命令:

string="text,text,text,text"
char=","
awk -F"${char}" '{print NF-1}' <<< "${string}"

我将字符串拆分为$char并打印结果字段数减1。

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

echo "${string}" | awk -F"${char}" '{print NF-1}'

答案 1 :(得分:88)

你可以删除所有其他字符并计算剩下的数字,例如:

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"

答案 2 :(得分:44)

您可以通过组合trwc命令来完成此操作。例如,要计算字符串e

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

输出

4

说明:命令tr -cd 'e'删除除&#39; e&#39;以外的所有字符,而命令wc -c计算其余字符。

多行输入也适用于此解决方案,例如命令cat mytext.txt | tr -cd 'e' | wc -c可以在文件e中计算mytext.txt,即使文件可能包含多行。

答案 3 :(得分:2)

如果你的服务器有它,那么awk效果很好

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

答案 4 :(得分:1)

基于每个人的出色答案和评论,这是最短,最甜蜜的版本:

new Function()

答案 5 :(得分:1)

也请检查一下,例如我们要计算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

答案 6 :(得分:0)

我将提出以下建议:

var="any given string"
N=${#var}
G=${var//g/}
G=${#G}
(( G = N - G ))
echo "$G"

不调用任何其他程序

答案 7 :(得分:-1)

awk 很酷,但为什么不保持简单呢?

num=$(echo $var | grep -o "," | wc -l)