#!/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”)。 [^x]
匹配除“x”之外的所有字符。
因此,${a//[^x]}
只会在值中保留“x”字符。 ${#v}
给出变量中的字符数。由于变量中只剩下“x”个字符,因此您可以得到这些字符的数量。
也可以通过调用外部程序来实现相同的目的,而不仅仅是依赖 bash 变量扩展(IMO 更简单,更清楚地表达意图):
echo "The number of occurrences of the character is: $(grep -oe "[$b]" "$a" | wc -l)"
关于bash - d=${c//[^$b]} 如何统计字母$b在$c中出现了多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72577023/