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検索パターンは1行ずつ区切ります。

答え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メタ文字はエスケープされます。バックスラッシュ、スペースなどを含むアイテムを検索したい場合は問題ありません。しかし、正規表現パターンを指定したい場合には悪いです。

関連情報