我需要使用Bash计算字符串中
在以下示例中,当char(例如)t
时, echo
s t
中var
的正确出现次数var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
1}},但是当字符是逗号或分号时,它会打印出零:
{{1}}
答案 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)
您可以通过组合tr
和wc
命令来完成此操作。例如,要计算字符串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)
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)