:에서 여러 검색 문자열을 검색하는 경우 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
메타문자는 이스케이프됩니다. 백슬래시, 공백 등을 포함한 항목을 검색하려는 경우에는 괜찮습니다. 그러나 정규식 패턴을 지정하려는 경우에는 좋지 않습니다.