Shell脚本统计字符串或文件中特定字符出现的次数
在编写Shell
脚本中需要判断网址中的/
出现的次数,进而获取网址的结构,然后根据需要可以截取部分网址。假设我们有一个字符串“Hello
Bash”:
1 | $ STRING="Hello Bash" |
使用 bash
shell,我们现在可以计算任何给定字符的出现次数。例如,让我们计算字符
l
出现的次数:
1 | $ echo $STRING | sed -e 's/\(.\)/\1\n/g' | grep l | wc -l |
sed
命令首先将任何给定的字符串分成多行。其中每行包含一个字符:
1 | $ echo $STRING | sed -e 's/\(.\)/\1\n/g' |
之后我们可以使用grep
命令来仅搜索特定字符。在本例中,我们仅打印字符
l
:
1 | $ echo $STRING | sed -e 's/\(.\)/\1\n/g' | grep l |
剩下的就是使用 wc -l 来简单地计算行数:
1 | $ echo $STRING | sed -e 's/\(.\)/\1\n/g' | grep l | wc -l |
相同的策略也可用于计算文件中字符的出现次数。下面的 bash shell
命令计算字符 l
在文件 /etc/services
中出现的次数:
1 | $ cat /etc/services | sed -e 's/\(.\)/\1\n/g' | grep l | wc -l |
然而,计算字符出现次数的另一种方法是使用 grep 的
--only-matching
或 -o
选项仅打印匹配的字符:
1 | $ grep -o l /etc/services | wc -l |