如果我在 : 中搜索多个搜索字符串grep
,通常只需执行以下操作:
grep "search1\|search2" somefolder/*.txt
但是,如果我有 100 个或更多搜索字符串怎么办?我可以这样说吗:
grep "stringPattern.txt" somefolder/*.txt
其中stringPattern.txt
包含我需要在 中搜索的单词列表的文件*.txt
。
答案1
grep
有-f
专门用于此目的的标志,请使用:
grep -f patternfile somefolder/*.txt
在patternfile
搜索模式中,搜索模式是逐行分隔的。
答案2
你也可以用其他方式工作。如果您有 100 个模式要搜索,则列出您不想搜索的内容(如果少于 100 个模式)并将其放在 file1.txt 中
grep -vf file1.txt somefolder/*.txt
答案3
我使用 perl 来执行此操作,因为您可以使用 perl 从数组构建正则表达式:
#!/usr/bin/perl
use strict;
use warnings;
open ( my $searchfile, '<', "searchfile.txt" ) or die $!;
my @search_for = <$searchfile>;
close ( $searchfile );
my $search_regex = join ( "|", map {quotemeta} @search_for );
$search_regex = qr/$search_regex/;
print "Regex: $search_regex\n";
foreach my $file ( glob ( "somefolder/*.txt" ) ) {
open ( my $check, '<', $file ) or die $!;
while ( <$check> ) {
print if m/$search_regex/;
}
close ( $check );
}
注意 -quotemeta
将转义元字符,如果您想搜索包括反斜杠、空格等在内的内容,这很好。但如果您想指定正则表达式模式,则不好。