UNIX:我如何在脚本中使用变量作为文件的搜索参数进行 grep?

UNIX: How would I grep in a script using a variable as a search parameter for a file?

在我开始之前,这并不是它看起来的样子,我在来到这里之前确实在网上搜索了一段时间。基本上我有一个脚本,用户在其中传递一个字符串并将其存储在一个变量中。然后我必须使用该词并在字典文件中搜索可以由它构成的所有子词。我遇到的问题是我需要确保单词至少有 4 个字符长。我对正则表达式不是很了解。我知道您可以在逻辑上使用的技术有时无法将它们拼凑在一起。我将向您展示代码行,并解释我认为应该这样做的原因。那么,有人可以纠正我的逻辑吗?我不是在找人给我发送代码行,但也许可以纠正我的逻辑,这样我就可以更好地理解并自己得出答案。

words=$(grep -iE '(["$text"]{4,})' /usr/dict/words)
echo "$words"

例如,如果我通过了 string college,我应该得到如下输出 细胞 大提琴 克莱 克莱格 等......

我将命令存储在另一个变量中以回显。具体原因我也不清楚,只是从我在网上看到的情况来看,大多数人都比较喜欢这个。将 grep 与 -i 一起用于忽略大小写,将 -E 用于正则表达式或 (egrep) 我认为表达式需要用单引号括号括起来。 $text 是我存储用户输入的变量。我知道 $ 通常表示结尾,[] 是一个范围,"" 使它读取变量而不是打印那里的内容。然后 {4,} 表示四个或更多字符。然后最后一部分是文件的路径。任何输入都将不胜感激,我不喜欢用勺子填满答案,这是一种什么都学不到的简单方法。如果可能的话,我只想更正我的逻辑。谢谢大家!!

如果 "subwords" 你的意思是字母的排列,那么除了引号外,你的命令没问题。不幸的是你必须这样做:

words=$(grep -iE '(['"$text"']{4,})' /usr/dict/words)

这样您就可以将单引号字符串传递给 grep,这样 shell 就不会解释它的特殊符号。但同时你必须扩展你的 $text var,因此你必须在你的单引号字符串中留出一个空隙,并在那个空隙中将你的变量放在双引号中。

希望我没有给你剧透。