use strict; use warnings; while ( my $line = ) { #-- would print lines starting with either 'f' or 'b': # if ( $line =~ /^(b|f)/) { # print $line; # } #-- not elegant, like the spec... if ( $line =~ /^(b)=(\S+)/ or $line =~ /^(f)\s+(\S+)\s+(\S+)$/ ) { print "$1 = '$2' (", $3 // '-' , ")\n"; } } __DATA__ Input file : (to extract for b and f) b=23 y=0x11 arg=0x70 def=0x1 val=0x234 checking system b=71 y=0x35 arg=0x87 def=0x3 val=0x76d h=reg.k2.io.chk 0x2001 b=54 y=0x23 arg=0x78 def=0x2 val=0x65b f chk.fin.reg.m_cwr 0x213 b=54 y=0x23 arg=0x78 def=0x2 val=0x65b checking system b=40 y=0x90 arg=0x34 def=0x5 val=0x2197 f ref.grf.pin.clk_trg 0x0021 #### b = '23' (-) b = '71' (-) b = '54' (-) f = 'chk.fin.reg.m_cwr' (0x213) b = '54' (-) b = '40' (-) f = 'ref.grf.pin.clk_trg' (0x0021)