我有一个包含单词列表的文本文件。我正在寻找一个Unix解决方案,如下所示:
对于每个单词,如果该单词在文件中,我想在目录的所有文件中搜索该单词,如果可以找到该单词,则返回其文件名。文件位于该目录的子目录中。
我需要一个循环吗?还是有一个特殊的命令可以做到这一点?我找到了"共同之处"。命令,但它似乎只适用于两个文件,而不是整个文件夹。
如果所有要搜索的文件都在同一文件夹中,并且不在其中的任何子文件夹中,则如下所示
ls -p | grep -v / | xargs grep -lf <file_with_list_of_words>
类似于
find -type f -exec grep -H -f list_of_words.txt {} ;
必须满足您的需求。
-f
grep选项使grep检查list_of_words.txt中的所有单词进行搜索:
grep——帮助
-f,——file= file从file中获取pattern
type -f
find选项告诉find
只检查文件。
一个改进将是,例如,只在*.txt
文件中搜索,同时忽略您的单词列表文件list_of_words.txt
:
find -type f ( -name *.txt ! -name list_of_words.txt ) -exec grep -H -f list_of_words.txt {} ;