in reply to Grep Issues

The broken pipe happens when head reads its one line and quits. That generates SIGPIPE to the system grep process. It's harmless, you can redirect local(*STDERR) to /dev/null in a suitable scope if you don't want to see the warning

Why not do that in perl? It's easy.

my ($output, @lines) = ''; my ($num, $re, $file) = @whatever; open my $fh, '<', $file or die $!; while (<$fh>) { push @lines, $_; shift @lines if @lines > $num; # $output = join('', @lines), last if /$re/; $output = $lines[0], last if /$re/; } close $fh or die $!;
Untested.

Update: I realized that my code didn't do exactly what OP's does. Original line commented out and correction added.

After Compline,
Zaxo