2016-03-28 11 views
-3

質問>> "pattern1/2/3 {"と "}"の間に "削除する行"を削除する必要があります。 おかげPerlのファイル内のパターン間で複数の行を削除するには

Line 1 of code to keep 
Line 2 of code to keep 
} 

pattern1 { 
line to be deleted 
line to be deleted 

} 

pattern2 { 
line to be deleted 
line to be deleted 

} 

pattern3 { 
line to be deleted 
line to be deleted 

} 

Line 3 of code to keep 
Line 4 of code to keep 
} 

答えて

0

あなたは、中括弧で囲まれた行を削除するために、非欲張りマッチと正規表現を使用し、その後、リストにあなたのパターンを置くことができます。

my @patterns = qw/ 
    pattern1 
    pattern2 
    pattern3 
/; 

foreach my $pattern (@patterns) 
{ 
    $file_contents =~ s/^$pattern \{.*?\}/$pattern {\n}/ms; 
} 
0
my @keywords = qw(pattern1 pattern2 pattern3); 

my $keywords_pat = "(?:\b(?:" . join("|", map quotemeta, @keywords) . ")\b)"; 

s/ $keywords_pat \s* \{ [^{}]* (?= \})//xg; 

または

s/ $keywords_pat \s* \{ \K ([^{}]* (?: \{ (?1) \} [^{}]*)*) (?= \})//xg; 

2番目のバージョンでは、ネストされた{...}が処理されます。

関連する問題