如何检查 Bash 脚本的输入是否包含文件中的 4 个或更多字母单词

如何检查 Bash 脚本的输入是否包含文件中的 4 个或更多字母单词

我必须测试字符串的一部分是否包含给定文件 (words.txt) 中的 4 个字母或更多单词,并打印是否包含。到目前为止,这是我的代码:

if [[ grep -q *"$Str"* words.txt ]]; then
   echo Yes
else
   echo No

我无法正确匹配它。有什么想法我做错了吗?

因此,我有一个包含随机单词的大文件,我需要测试我输入的字符串是否包含该文件中任何单词的子字符串例如:如果我输入字符串“ehhelloef”,并且words.txt包含单词“hello”在其中,它需要检测。此外,我只需要测试words.txt中超过4个字母的单词

答案1

[[ 扩展测试旨在与特定的运营商而不是命令。


以下awk命令应该有效:

awk -vcheck="$Str" '(check ~ $1 && length($1) > 3) {found="yes"} END {if (found=="yes") {print "yes"} else {print "no"}}' words.txt

这将检查文件中的每个单词是否是输入字符串的子字符串以及单词的长度是否大于 3。如果是,则变量found将设置为 yes。当awk完成文件时,它将检查是否found等于 yes,如果是,则打印yes,否则打印no


如果你需要在 shell 中,如果构造要执行除 print yes/no 以外的操作,您可以将 print 语句替换为 exit 语句,如下所示:

if awk -vcheck="$Str" '(check ~ $1 && length($1) > 3) {found="yes"} END {if (found=="yes") {exit 0} else {exit 1}}' words.txt
then
  echo yes
else
  echo no
fi

答案2

一种方法是:

  1. 从中提取 4 个或更多字母的单词words.txt

  2. 将结果作为“文件”传递,以便grep -Ff对变量的内容进行固定字符串匹配:

前任。利用 bash流程替代这里的字符串

grep -Fqf <(grep '....' words.txt) <<< "$str" && echo "found" || echo "not found"

相关内容