perl脚本中的系统grep给出了不平衡的括号

1 perl grep system

system ("grep -E 'Type|group|slack ('  $a > temp.rpt");
Run Code Online (Sandbox Code Playgroud)

上面这行给了我一个错误 Unmatched ( or \(

这有什么不对?

我之前(也尝试过反斜杠.它显示相同的错误.

zdi*_*dim 6

既然你在脚本中,为什么不在Perl中这样做呢?

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 \(/; 
}
Run Code Online (Sandbox Code Playgroud)

根据需要调整正则表达式.通常,现在更改和调整更容易.

如果输入文件不是太大,一旦打开文件,您也可以在一行中处理

print $out_fh grep { /Type|group|slack \(/ } <$fh>;
Run Code Online (Sandbox Code Playgroud)

所述的grep强加列表上下文上的<>操作者,所以它读取并一次返回所有行的列表,并且被打印在通过条件的那些.


关于正则表达式的评论.就目前而言,它匹配Type或者group或者slack (.如果你打算匹配其中任何一个单词,然后是space-paren,你需要分组括号,/(?:Type|group|slack) \(/.该?:有如此它不是无谓地捕获.