Windows Grep:如何搜索包含3个不同单词的文件

时间:2014-01-10 20:37:20

标签: windows grep

这一定是个愚蠢的问题,但我找不到答案..我正在使用Windows Grep。

我想找到包含String1 AND string2 AND St​​ring3

的文件

谢谢!

修改

我已尝试使用此answer的正则表达式,但windows grep显示错误..

(?=匹配这个表达式)(?=匹配这个)(?=哦,这个)

编辑2:

谢谢@brianadams和@MC ND的答案!我会检查awk,因为它似乎是windows grep的一个很好的替代品。由于问题是关于windows grep,我认为最好是让它开放以查看是否有人知道答案..

再次非常感谢你的回答!

2 个答案:

答案 0 :(得分:2)

here

下载Windows awk

然后这样做

C:\> awk "/string1/&&/string2/&&/string3/{print}" myFile.txt

优于grepfindstr

EDIT 如果要在文件中的任何位置找到所有3个字符串,请将RS =“\ 0”传递给awk。这将要求awk读入整个文件

C:\> awk "BEGIN{RS=\"\0\"}/string1/&&/string2/&&/string3/{print FILENAME;exit}" myFile.txt

答案 1 :(得分:1)

通常,对于复杂的搜索条件,我建议使用grep,但在这种情况下,搜索整个文件的字符串,findstr可能是更好的选择(或不是,请参阅{{3} })

无论如何,假设您的文件不会与findstr限制发生冲突,其中一个特征是它能够从控制台/管道中检索应该搜索字符串的文件列表。所以,在你的情况下,你需要像

这样的东西
findstr /l /c:"string1" /m files*.* | findstr /l /c:"string2" /m /f:/ | findstr /l /c:"string3" /m /f:/

其中/l表示搜索是文字字符串,/c:"string"要搜索的字符串,/m仅返回文件列表,/f:/从stdin检索文件列表在哪里搜索。

这样,每个findstr只搜索从管道中前一个findstr返回的文件列表。