检查文件中是否存在输入字符串

检查文件中是否存在输入字符串

你必须读取字符串1,我该怎么办?这是我的代码:

#!/bin/sh
echo "Enter your sting: "
read read string1
if [ grep -q $string1 file.txt ];then
   echo "Found it"
else
   echo "Sorry this string not in file"
fi
exit 0

答案1

  • 您的read命令是错误的,它应该是read string1(并且您应该使用-r以防止read混淆反斜杠read -r string1:);
  • 测试也是错误的,因为if grep -q $string1 file.txt你不是在评估输出grep而是在评估它的返回值;
  • 您应该传递该-F选项grep以防止它解释这样的正则表达式元字符:if grep -qF $string1 file.txt
  • 您应该使用双引号$string1来防止潜在的文件名扩展和/或单词拆分:if grep -qF "$string" file.txt

其他说明:

  • 最后的exit 0是多余的并且不是真正需要的,好像脚本设法到达该点而没有出现错误,它0无论如何都会返回;
  • 壳牌检测是调试脚本的非常有用的资源。

因此根据上述内容修改后的脚本如下:

#!/bin/sh
echo "Enter your sting: "
read string1
if grep -qF "$string1" file.txt;then
   echo "Found it"
else
   echo "Sorry this string not in file"
fi

答案2

我认为最好将结果(在本例中为匹配次数)存储在变量中。

也就是说,你有两个选择,用于grep -c计算匹配的行数

count=$(grep -c "$string1" file.txt)

或者将匹配的行通过管道传输到wcfrom grep -o(--only-matches)

count=$(grep -o "$string1" file.txt | wc -l)

这将是具有第二个选项的完整脚本

#!/bin/sh
echo "Enter your string: "
read string1
count=$(grep -o "$string1" file.txt | wc -l)
if [ $count != 0 ];then
   echo "Found it ($count times)"
else
   echo "Sorry this string not in file"
fi
exit 0

另外,你写了read两次。

相关内容