我有一个包含一组文本文件的文件夹。

-Folder
--- file 1
--- file 2
--- file 3
--- file 4

我有一组要检查的单词是否在里面。 {word1, username, blah blahblah}
是否可以通过单个命令发现这些文件中的哪个包含列表中的所有单词?

我看到可以和grep一起使用,但我认为它们可以在同一行上工作,而在我看来,担忧总是在不同的行上。

单词数是静态的。总是3或4,因此如果需要,我可以在命令中对其进行硬编码。

编辑:
它们在AND中。如果其中没有所有文件,则不接受文件!
我想避免这样做
egrep -l'word1'。 xargs egrep -l'word2'

是否有更好的解决方案只调用一次grep?

干杯,
Ste

最佳答案

这对您有用吗?

grep -IRE 'word1|username|blah blahblah' /path/to/files/ |
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' |
awk -F: '$1!=p{if(b"" && c > 2)print b; p=$1;c=0;b=s=""}{b=b s $0;s=RS;c++}END
{if(b"" && c > 2)print b}' | awk -F: '{print $1}' | sort -u

第一部分(grep)将列出所有具有匹配模式的文件名。第二部分(sed)将从第一个输出中删除重复项,仅给出不同的行。第三部分将仅显示出现多次的文件,第四部分将删除您匹配的模式,最后一个仅为您提供文件名,我的 friend 。

我的头现在疼...

关于linux - Linux在文件中搜索多个单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7584958/

10-14 11:17
查看更多