grep :在小字符串中查找更大的字符串

grep :在小字符串中查找更大的字符串

我正在编写一个小型 shell 脚本来接收输入并与文本文件进行匹配。

但是,输入的字符串比文件中的字符串更大,我想要与之匹配。

用户输入:

abc-de-ef-gh1

文件中的文本:

This is test,-de-ef-gh,This is test

grep如果我使用现有文件进行用户输入,我想要一个积极的结果。

我怎样才能实现这个目标?我无法用 grep 做到这一点。

答案1

您有一个包含模式的文件。 grep可以用它的选项读取模式-f。如果你想检查字符串 是否$input与 中的模式匹配patterns.txt,你可以这样做

printf '%s\n' "$input" |
if grep -q -f patterns.txt; then
    echo 'matches'
else
    echo 'does not match'
fi

这将遍历grep具有 中模式的字符串内容patterns.txt。您bash可以改为使用此处字符串:

if grep -q -f patterns.txt <<<"$input"; then
    echo 'matches'
else
    echo 'does not match'
fi

停止产生输出(我们只对退出状态感兴趣)-qgrep

如果模式是固定字符串(不是正则表达式),除了其他标志 ( ) 之外,还应使用-Fwith 。grepgrep -qF -f ...

答案2

使用bash,cutgrep:

read -p "Hey user, input something: " $n
printf "Match "
grep -m 1 -q -f <(cut -d, -f2 file) <<< "$n" || printf "not "
printf "found.\n"

笔记:

  • 在较短的字符串中搜索较长的字符串是不可能的,但这实际上是为了查找是否存在较短的字符串文件匹配更长的字符串。
  • cut用于从中提取中间字段文件
  • grep搜索用户输入字符串中的中间字段。
  • printf提供一些反馈。

相关内容