#!/usr/bin/env perl use strict; use warnings; { local $/ = ''; my $wanted = "Receive: \n"; my $re = qr{(\[\d\d\]|.)}; while () { chomp; next unless substr($_, 0, length $wanted, '') eq $wanted; #print "|$_|\n"; # For demo only - see current $_ value my @hex; while (/$re/g) { push @hex, length $1 == 1 ? sprintf '%02X', ord $1 : substr($1, 1, 2); } print "@hex\n"; } } __DATA__ Message: 11 started at: 2018-06-29 16:20:07 Transmit: ATV1[0D] Transmit: [01]10179311000=[03] Receive: [01]20179321157>[02]00 00 00[03][00] Transmit: [01]10179312000>[03] Receive: [01]20179331157?[02]00 00 00[03][00] Message: amount of bytes collected ok, data accepted Message: 11 ended at: 2018-06-29 16:20:46