如何使用 grep 从文件中搜索多个搜索模式

如何使用 grep 从文件中搜索多个搜索模式

如果我在 : 中搜索多个搜索字符串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将转义元字符,如果您想搜索包括反斜杠、空格等在内的内容,这很好。但如果您想指定正则表达式模式,则不好。

相关内容