linux在一个文件中搜索多个单词

linux在一个文件中搜索多个单词,linux,bash,command,Linux,Bash,Command,我有一个包含一组文本文件的文件夹 -Folder --- file 1 --- file 2 --- file 3 --- file 4 我有一组单词,我想检查它们是否在里面{word1,用户名,废话废话} 是否有一种方法可以通过单个命令来发现这些文件中的哪个文件包含我列表中的所有单词 我看到可以使用一些和grep,但我认为它们在一条线上工作,而在我的情况下,工作总是在不同的线上 字数是静态的。始终为3或4,因此如果需要,我可以在命令中硬编码它们 编辑: 他们在和。如果文件中没有全部内容,则不

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

-Folder
--- file 1
--- file 2
--- file 3
--- file 4
我有一组单词,我想检查它们是否在里面<代码>{word1,用户名,废话废话}

是否有一种方法可以通过单个命令来发现这些文件中的哪个文件包含我列表中的所有单词

我看到可以使用一些和grep,但我认为它们在一条线上工作,而在我的情况下,工作总是在不同的线上

字数是静态的。始终为3或4,因此如果需要,我可以在命令中硬编码它们

编辑: 他们在和。如果文件中没有全部内容,则不接受该文件! 我想避免这样做 白鹭-l'word1.| xargs白鹭-l'word2'

有没有更好的办法只给grep打一次电话

干杯, Ste使用:

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}
使用grep:

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

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

另一种解决方案,最适合一小部分单词:

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

如果要grep到目录树中,请执行以下操作

egrep -E '{word1|username|blah blahblah)' `find . -type f -print` 

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

这对您有用吗

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


我现在头痛…

问题是多次返回文件名。有没有办法避免重复?不起作用。在当前文件夹中,如果我使用grep-E'(word1 | word2),则文件1包含word1 word2 word3 word4 word5(在不同的行上)。我得到emptySome发行版也有一个
egrep
,它与
grep-E
相同,所有其他选项与
grep
相同。