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

관련 정보