in reply to
get n lines before or after a pattern
Here's another option:
use Modern::Perl;
my $searchFor = 'jack';
local $/ = 'id ';
while (<DATA>) {
next if !/\nname\s+\b$searchFor\b/;
say 'id ', join "\n", ( split "\n" )[ 0, 1, 2, 5 ];
}
__DATA__
start
id 10
address Richmond
name jack
xxxxx
aaaaa
lastname black
yyyy
zzzzz
id 11
address Central
name rick
cccccc
dddddd
lastname hanna
eeeee
yyyyy
id 12
address denver
name jack
sssss
tttttt
lastname strong
rrrrr
mmmmm
id 13
address Virginia
name mick
aaaaaaa
ooooooo
lastname jagger
gggggg
hhhhhh
id 14
address Maine
name rick
sssss
sssss
lastname stewart
ssssss
ffffff
end
Output:
id 10
address Richmond
name jack
lastname black
id 12
address denver
name jack
lastname strong
Hope this helps!