我有一个带噪音的名字列表和一个干净的名字列表,我确信干净的名字是带噪音的名字的精确子串。
假设我们有一个带噪音的名称,例如var?goldenfoo
,我想从文本文件cleannames
输出,看起来像这样
golden
blue
red
golden
。
我曾尝试将grep用于cat
ed cleannames
,但这似乎相当不合理。
答案 0 :(得分:1)
尝试:
grep -Fof cleannames.txt text.txt
如果您想要其他内容,只需编辑您的问题并添加更多详细信息。 :)
让我们说:
诺维斯的Impedit quas et totam。 Voluptas repellat voluptas possimus rerum est golden nihil。 Et ut minima坐下。 Quia accusamus rerum voluptate。 Dolores molestiae非dolorem dignissimos quaerat magni。 Quia reiciendis cupi golden ditation quo hic doloremque molestiae。奥迪奥 odio quis est quisquam eligendi esse。自然中的自由建筑师 dolorum eveniet。 Modi error dolorum voluptas ul red lam aut。 Soluta veniam corporis est.Illum maxime golden perferendis incidunt qui consequatur。 Laborum quia ab voluptatem。
将打印
golden
golden
red
golden
和
echo 'var?goldenfoo' | grep -Fof cleannames.txt
将打印
golden
或
clean=(golden red blue) #or read into array from a file...
text='var?goldenfoo'
grep -Fof <(printf "%s\n" "${clean[@]}") <<< "$text"
打印
golden
因此您可以代替cleannames.txt
进行任何进程替换,而不是text.txt
您可以进行任何重定向。任何组合都可以。
答案 1 :(得分:0)
您可以使用mapfile
保持数组中的干净名称:
mapfile -t ary < cleannames
然后使用这样的搜索功能:
srch() { for i in "${ary[@]}"; do [[ $1 == *"$i"* ]] && echo "$i"; done; }
然后将其调用为:
srch 'var?goldenfoo'
golden
srch 'foobar?bluebox'
blue
答案 2 :(得分:0)
如果你想比grep搜索更快,你应该给予 Silver Searcher一试。