#! perl -sw use strict; my $term = shift; my @section; while( ) { @section = () if /Header/; push @section, $_; if( /$term/ ) { print for @section; print while defined( $_ = ) and not /^Header/; last; } } __DATA__ Header 1 just some junk just some junk just some junk just some junk just some junk Header 2 just some junk just some junk just some junk just some junk just some junk Header 3 just some junk just some junk just some junk this is a term just some junk just some junk Header 4 just some junk just some junk just some junk just some junk just some junk Header 5 just some junk just some junk a different term just some junk just some junk just some junk #### c:\test>junk34 term Header 3 just some junk just some junk just some junk this is a term just some junk just some junk c:\test>junk34 different Header 5 just some junk just some junk a different term just some junk just some junk just some junk