gpt4 book ai didi

linux - grep 语句在 case 语句中不起作用

转载 作者:可可西里 更新时间:2023-11-01 11:48:27 25 4
gpt4 key购买 nike

我想制作一个 shell 脚本,它接受元音字母并打印文本文件“abc.txt”中该元音字母的出现次数。

下面的脚本完美运行(打印文本文件“abc.txt”中元音“a”出现次数的脚本):

#!/bin/bash
grep -o [aA] abc.txt|wc -l

但是我想为所有元音实现这个,所以我这样做了:

#!/bin/bash
echo -n "Enter the desired vowel: "
read ch
case ch in
a) grep -o [aA] abc.txt|wc -l;;
A) grep -o [aA] abc.txt|wc -l;;
e) grep -o [eE] abc.txt|wc -l;;
.
.
.
U) grep -o [uU] abc.txt|wc -l;;
esac

代码执行但在我输入所需的元音后没有任何显示。我也试过这个(但是结果和上面的代码一样):

#!/bin/bash
x=0
echo -n "Enter the desired vowel: "
read ch
case ch in
a) x=grep -o [aA] abc.txt|wc -l;echo $x;;
A) x=grep -o [aA] abc.txt|wc -l;echo $x;;
e) x=grep -o [eE] abc.txt|wc -l;echo $x;;
.
.
.
U) x=grep -o [uU] abc.txt|wc -l;echo $x;;
esac

我不明白为什么当我将 grep 语句放在 case 语句中时,它们没有显示任何内容。

最佳答案

多个问题,但导致问题的主要原因是未在 case 构造中使用变量。使用 ch 只是一个常量,不匹配下面的任何表达式。

case "$ch" in
# ^^^^^ This needs to be a variable used in read command

此外,要存储命令的输出,您需要使用 $(cmd) 类型的命令替换语法。也可以代替 grep .. | wc -l 你可以只使用 -c 标志来返回匹配字符串的总数。

x=$(grep -oc '[aA]' abc.txt); echo "$x"

(或)甚至改进的 grep 命令将启用与 -i 标志的不区分大小写的匹配

x=$(grep -oci 'a' abc.txt); echo "$x"

关于linux - grep 语句在 case 语句中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46581564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com