-2

Question >> I need to delete lines which are mentioned "line to be deleted" between the "pattern1/2/3 {" and "}", using Perl! Thanks

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
}
ikegami
  • 367,544
  • 15
  • 269
  • 518
Ravi Raj
  • 53
  • 1

2 Answers2

0

You can put your patterns into a list, then use a regex with non-greedy match to remove lines enclosed by curly braces:

my @patterns = qw/
  pattern1
  pattern2
  pattern3
/;

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

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

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

or

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

The second version handles nested {...}.

ikegami
  • 367,544
  • 15
  • 269
  • 518