system ("grep -E 'Type|group|slack (' $a > temp.rpt");
上記の行は、ここで間違っているものを私にエラーUnmatched (or \(
システムのgrepは
を与えているアンバランス括弧になりますか?
(
より前にバックスラッシュを試しました。同じエラーが表示されます。あなたはスクリプトであるため、3つのバックスラッシュ
system ("grep -E 'Type|group|slack \\\(' $a ");
system ("grep -E 'Type|group|slack (' $a > temp.rpt");
上記の行は、ここで間違っているものを私にエラーUnmatched (or \(
システムのgrepは
を与えているアンバランス括弧になりますか?
(
より前にバックスラッシュを試しました。同じエラーが表示されます。あなたはスクリプトであるため、3つのバックスラッシュ
system ("grep -E 'Type|group|slack \\\(' $a ");
、なぜ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にリストコンテキストを課しので、それは読み込み、一度に開いた後、あなたが、同様に1行で処理できる大きすぎない場合
リスト内のすべての行が返され、条件に合格した行が出力されます。
regexに対するコメント。現状では、Type
またはgroup
またはslack (
と一致します。万一、いずれかの単語と一致する場合はスペース - 括弧が続く場合は、グループ化括弧/(?:Type|group|slack) \(/
が必要です。 ?:
があるので、不必要にキャプチャされません。
なぜ3つの具体的に? – melpomene
を使用する必要が
(
は、grep -E
の正規表現メタ文字です。だからこそあなたは誤りを得る。
単一のバックスラッシュを追加しても、perl:"\("
で処理された文字は"("
と同じ文字列なので修正できません。 (
は、基本的な「POSIXでは特別なものではありませんので、
はそれを修正するには、(その後、grep
によって解釈され、2つの文字列\(
、変身"\\("
、)2つのバックスラッシュを使用するか、または-E
オプションを削除するか必要があります"正規表現(これはデフォルトでgrep
が使用するものです)。
「$ a」とは何ですか?これはスクリプトの初期に作成されたファイル名ですか? – zdim
['誰かが私の質問に答えるとき、どうすればいいですか '](http://stackoverflow.com/help/someone-answers) – zdim