我必须测试字符串的一部分是否包含给定文件 (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
一种方法是:
从中提取 4 个或更多字母的单词
words.txt
将结果作为“文件”传递,以便
grep -Ff
对变量的内容进行固定字符串匹配:
前任。利用 bash流程替代和这里的字符串
grep -Fqf <(grep '....' words.txt) <<< "$str" && echo "found" || echo "not found"