我正在编写一个小型 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
停止产生输出(我们只对退出状态感兴趣)-q
。grep
如果模式是固定字符串(不是正则表达式),除了其他标志 ( ) 之外,还应使用-F
with 。grep
grep -qF -f ...
答案2
使用bash
,cut
和grep
:
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
提供一些反馈。