system ("grep -E 'Type|group|slack (' $a > temp.rpt");
上面一行是給我一個錯誤Unmatched (or \(
系統的grep給出不平衡括號
這裏有什麼問題?
我也試過(
之前的反斜槓。它顯示相同的錯誤。
system ("grep -E 'Type|group|slack (' $a > temp.rpt");
上面一行是給我一個錯誤Unmatched (or \(
系統的grep給出不平衡括號
這裏有什麼問題?
我也試過(
之前的反斜槓。它顯示相同的錯誤。
既然你在一個腳本,爲什麼不這樣做在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 \(/;
}
根據需要調整您的正則表達式。一般來說,現在改變和調整東西要容易得多。
如果輸入文件不是太大,你可以在一行中處理爲好,一旦你打開的文件
print $out_fh grep { /Type|group|slack \(/ } <$fh>;
的grep強加列表上下文在<> operator,所以它讀取並一次返回列表中的所有行,並打印通過該條件的行。
對正則表達式的評論。現在,它匹配Type
或group
或slack (
。如果有的話,你打算匹配任何一個詞,然後是空格,你需要分組括號/(?:Type|group|slack) \(/
。 ?:
在那裏,所以它不是不必要的捕獲。
(
是grep -E
中的正則表達式元字符。這就是你得到錯誤的原因。
添加一個反斜槓並不能修復它,因爲這是由perl處理的:"\("
是與"("
相同的字符串。
要解決它,你需要或者使用兩個反斜槓("\\("
,它變成兩個字符串\(
,然後由grep
解釋),或刪除-E
選項,因爲(
是不是在POSIX「基本特「正則表達式(這是grep
默認使用的)。
什麼是$ a?這是一個文件名,在腳本的早期構建? – zdim
請參閱['當有人回答我的問題時該怎麼辦?](http://stackoverflow.com/help/someone-answers) – zdim