linux搜索文件中的多个单词

时间:2011-09-28 14:37:12

标签: linux bash command

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

-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

5 个答案:

答案 0 :(得分:7)

这对你有用吗?

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)将从第一个输出中删除重复项,只给出不同的行。第三部分只显示多次出现的文件,第四部分将删除匹配的模式,最后一部分只会为您提供我的朋友的文件名。

我的头疼了......

答案 1 :(得分:4)

使用:

grep -f words.txt input

示例:

$ cat words
word1
username
blah blahbla

a
word1
username blah blahblah
b
username blah blahblah
c
word1
d
word1, username, blah blahblah}

$ grep -f words.txt *
a:word1
a:username blah blahblah
b:username blah blahblah
c:word1
d:word1, username, blah blahblah}

答案 2 :(得分:3)

使用grep:

grep -E '(word1|username|blah blahblah)' Folder/*

-E标志将grep置于正常表达式的“扩展”模式。这将默认显示文件名和匹配的文本。如果您只想要文件名,请在选项中添加-l

答案 3 :(得分:1)

另一种解决方案,最适用于一小组词:

grep -e word1 -e username -e "blah blahblah" Folder/*

答案 4 :(得分:1)

如果您想要进入目录树

,请执行以下操作
egrep -E '{word1|username|blah blahblah)' `find . -type f -print` 

我建议您在搜索有关* nix系统的答案时使用术语目录而不是文件夹: - )