想知道如何计算一行中的特定字符。
例如:
Hey . My . Name . Is . Bash
用字符“。” 应该返回:4
我们被告知 grep 会很有用,但找不到一个好方法来做到这一点。
谢谢
有很多方法。
像这样的例子:
$ echo "Hey . My . Name . Is . Bash" | grep -o "\." | wc -w
4
或使用双 grep:
$ echo "Hey . My . Name . Is . Bash" | grep -o "\." | grep -c "\."
4
尝试:
$ echo "Hey . My . Name . Is . Bash" | grep -o '\.' | wc -l
4
纯重击:
$ s="Hey . My . Name . Is . Bash"
$ m=${s//[^.]/}
$ echo ${#m}
4
完后还有:
$ tr -C -d [\.] <<< $s | wc -c
4
$ echo "Hey . My . Name . Is . Bash" | tr -cd . | wc -m
我相信tr
在这里使用更便宜。
在纯 bash 中:
str="Hey . My . Name . Is . Bash"
len=${#str}
str=${str//./}
len2=${#str}
count=$((len-len2))
echo "There are $count '.' in '$str'"
这个怎么运作:
${#var_name}
扩展为变量 var_name 的值的长度${var_name//./}
.
用空字符串替换所有出现的在这里试试:http: //ideone.com/SLkLkL
你不需要用两个进程来做。
如果您想在一行中计算特殊(单个)字符:
kent$ echo "Hey . My . Name . Is . Bash"|awk '{print split($0,a,".")-1}'
4
或者:
kent$ echo "Hey . My . Name . Is . Bash"|awk '{print gsub("\\.","")}'
4