在bash中搜索子字符串匹配的行的最有效方法是什么?

在bash中搜索子字符串匹配的行的最有效方法是什么?,bash,Bash,我有一个带噪声的名字列表和一个干净的名字列表,我确信干净的名字是带噪声名字的精确子串 假设我们有一个带噪波的名称,例如var?goldenfo,我想从一个文本文件cleannames中输出,如下所示 golden blue red 金色的 我已经尝试过使用grep来创建新的名称,但这似乎是不够的 试试看: grep -Fof cleannames.txt text.txt 如果您需要其他内容,只需编辑您的问题并添加更多详细信息: 比如说: 在全方位上阻止它。魟魟魟 雷拉姆是戈登尼希尔。我们坐

我有一个带噪声的名字列表和一个干净的名字列表,我确信干净的名字是带噪声名字的精确子串

假设我们有一个带噪波的名称,例如var?goldenfo,我想从一个文本文件cleannames中输出,如下所示

golden
blue
red
金色的

我已经尝试过使用grep来创建新的名称,但这似乎是不够的

试试看:

grep -Fof cleannames.txt text.txt
如果您需要其他内容,只需编辑您的问题并添加更多详细信息:

比如说:

在全方位上阻止它。魟魟魟 雷拉姆是戈登尼希尔。我们坐得很低。苦瓜 呕吐。不带权贵的小酒馆。 铜离子是一种分子物质。奥迪奥 奥迪奥·奎斯(odio quis)就是埃利根迪·埃塞(eligendi esse)的奎斯。在id中的自然建筑 多洛勒姆·埃文尼特。Modi错误多洛伦·沃卢帕斯·乌尔雷德拉姆aut。溶质 鹿肉。Illum maximegolden perferendis Incident qui 消费习惯。产期为一个月

将打印

golden
golden
red
golden
golden

echo 'var?goldenfoo' | grep -Fof cleannames.txt
将打印

golden
golden
red
golden
golden


因此,您可以使用任何进程替换来代替cleannames.txt,也可以使用任何重定向来代替text.txt。任何组合都有效。

您可以使用mapfile在数组中保留干净的名称:

然后将其调用为:

srch 'var?goldenfoo'
golden

srch 'foobar?bluebox'
blue

如果你想比grep搜索更快,你应该给出
试试看

名称不存储在文件中,它们是一个变量。cleannames是一个文件,但name var?Goldenfo不是。
srch() { for i in "${ary[@]}"; do [[ $1 == *"$i"* ]] && echo "$i"; done; }
srch 'var?goldenfoo'
golden

srch 'foobar?bluebox'
blue