我有一个包含一组文本文件的文件夹。
-Folder
--- file 1
--- file 2
--- file 3
--- file 4
我有一组词,我想检查它是否在里面。 {word1, 用户名, blah blahblah}
有没有一种方法可以通过单个命令来发现这些文件中的哪一个包含我列表中的所有单词?
我看到可以使用一些和 grep,但我认为它们在单行上工作,而在我的情况下,wors 总是在不同的行上。
字数是静态的。总是 3 或 4,所以如果需要,我可以在命令中对它们进行硬编码。
编辑: 他们在 AND 中。如果文件中没有所有文件,则不接受该文件! 我想避免做 egrep -l 'word1' .| xargs egrep -l 'word2'
是否有更好的解决方案,只调用一次 grep?
干杯,
最佳答案
这对你有用吗?
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) 将从第一个输出中去除重复项,只给出不同的行。第三部分只会显示出现不止一次的文件,第四部分会去掉你匹配的模式,最后一个只会为你提供文件名 my friend。
我现在头疼...
关于linux 在一个文件中搜索多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584958/