#!/bin/bash
echo "The program checks the number of indicated letters"
echo "Enter the file name and path"
read a
c=$(cat $a)
echo "
Enter which letter is to be found. for examle 'a' "
read b
d=${c//[^$b]}
echo "The number of occurrences of the character is: " ${#d}
我不明白这条线是怎么工作的:d=${c//[^$b]}
。程序运行良好,我只是不明白表达式[^$b]
是如何工作的。我已经读到表达式[^...]
匹配不在括号中的任何字符。
例如,如果用户输入字符"a",他将在指示的文件中找到该字母的出现次数。有人能帮我解释一下这是怎么回事吗?因为[^...]
的定义完全不同。
我发现了这样一个定义:"[^d]"
匹配除b到d范围内的字符之外的任何字符。所以,如果文件中有一串句子,包含但不应该这样显示,除非我误解了什么。
${s//x}
将删除变量s
值中出现的所有x
。[x]
将匹配列表中的任何字符(该列表仅包含单个字符,因此将只匹配"x")。CCD_ 10匹配除"之外的所有字符;x〃;。
因此${a//[^x]}
将只离开";x〃;值中的个字符。${#v}
给出变量中的字符数。由于只有";x〃;字符留在变量中,这将为您提供这些字符的数量。
也可以通过调用外部程序来实现同样的目的,而不仅仅依赖bash变量扩展(IMO更简单,更清楚地表达了意图):
echo "The number of occurrences of the character is: $(grep -oe "[$b]" "$a" | wc -l)"