2016-11-21 1 views
1
system ("grep -E 'Type|group|slack (' $a > temp.rpt"); 

위의 라인은 여기 뭐가 문제 나에게 오류 Unmatched (or \(시스템 GREP은

을주고있다 불균형 괄호를 준다?

( 전에 백 슬래시를 시도했습니다. 동일한 오류가 표시됩니다.

+0

무엇이'$ a'입니까? 이것은 스크립트의 앞부분에 만들어진 파일 이름입니까? – zdim

+0

['누군가 내 질문에 대답 할 때 무엇을해야합니까? '] (http://stackoverflow.com/help/someone-answers) – zdim

답변

0

당신은 왜 Perl로 그렇게하지, 세 개의 백 슬래시

system ("grep -E 'Type|group|slack \\\(' $a "); 
+0

구체적으로 왜 세 가지가 있습니까? – melpomene

6

스크립트에서 때문에를 사용할 필요가?

my $infile = '...'; 
open my $fh,  '<', $infile or die "Can't open $file: $!"; 
open my $out_fh, '>', $temp.rpt or die "Can't open $temp.rpt: $!"; 

while (<$fh>) { 
    print $out_fh $_ if /Type|group|slack \(/; 
} 

필요에 따라 정규식을 조정하십시오. 일반적으로 지금은 변경하고 조정할 수 있습니다. 입력 파일은 당신이 파일

print $out_fh grep { /Type|group|slack \(/ } <$fh>; 

grep<> operator리스트 문맥을 부과 그래서 읽고 한 번을 열어 일단 당신이뿐만 아니라 한 줄에 처리 할 수있는 너무 크지 않으면

목록의 모든 행을 반환하고 조건을 통과 한 행이 인쇄됩니다.


regex에 대한 의견. 그대로, Type 또는 group 또는 slack (과 일치합니다. 어떤 경우라도 단어 중 하나와 일치하고 스페이스 괄호 뒤에 오는 경우 괄호 그룹화가 필요합니다 (/(?:Type|group|slack) \(/). ?:이 있으므로 불필요하게 캡처되지 않습니다.

0

(grep -E에있는 정규식 메타 문자입니다. 그래서 당신은 오류가 발생합니다.

단일 백 슬래시를 추가해도 수정되지 않습니다. perl : "\("에 의해 처리 되었기 때문에 "("과 같은 문자열입니다. ( 기본 "POSIX 특별하지 않기 때문에

는 문제를 해결하려면, 당신은 (다음 grep에 의해 해석 된 두 개의 문자열 \(로 전환 "\\(") 두 개의 백 슬래시를 사용하거나 -E 옵션을 제거하거나 필요 "정규식 (grep은 기본적으로 사용합니다).