# cat re1 use warnings; use strict; undef $/; my $tout = ; my $z; while ($tout =~ /((?:DES|TN).+?(DATE|ZONE)[^\n]+\n\s*\n)/sg) { print "\n\n", ++$z, ":\n", $1; } __DATA__ DES MAIL TN 001 0 02 00 TYPE SL1 CDEN DD CUST 0 KLS 1 FDN TGAR 0 LDN NO NCOS 0 09 DATE 9 MAR 2000 TN 001 0 02 01 05 RLS 06 TRN 07 AO3 08 09 ZONE 002 TN 001 0 02 01 05 RLS ZONE 001 07 AO3 08 09 DATE 9 MAR 2000 #### # perl -w ./re1 1: DES MAIL TN 001 0 02 00 TYPE SL1 CDEN DD CUST 0 KLS 1 FDN TGAR 0 LDN NO NCOS 0 09 DATE 9 MAR 2000 2: TN 001 0 02 01 05 RLS 06 TRN 07 AO3 08 09 ZONE 002 3: TN 001 0 02 01 05 RLS ZONE 001 07 AO3 08 09 DATE 9 MAR 2000