创建与给定文件具有共同单词的文件列表的最佳方法是什么。例如,如果我有:
$ ls
mainFile file1 file2 file file4
$ cat mainFile
exquisite malicious sentient pulsating
perspicacious one
tawdry fumigate Baryshnikov O'connor
我想列出 中cwd
包含 中任何一个单词的任何文件mainFile
。解决这个问题的最佳方法是什么?
由于每行的字数mainFile
不是恒定的,因此我使用cut
一些技巧来寻找解决方案。我试图用单词创建一个字符串,然后将它们放在命令|
中分隔开grep -l "exquisite|malicious|etc" *
。我对任何方法都持开放态度,尽管这可能会更好。
答案1
首先为mainFile生成索引,
sed 's/ /\n/g' mainFile | sort | uniq > mainFile.idx
然后对固定字符串执行 grep:
grep -F -f mainFile.idx file*
答案2
如果您grep
支持非标准-w
选项(用于匹配单词):
grep -lwFe "$(tr -cs "[[:alnum:]_'-]" '[\n*]' < mainfile | sort -u)" file*
答案3
使用此代码:
for pattern in `cat mainfile`
do
grep -l "$pattern" file*
done
阿润