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