my @matches = $pdus =~ /[^{}]+ | \{ (?: (?R) | [^{}]+ )+ \} /gx; __END__ $VAR1 = [ '[ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: UDT', '{ [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line2: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line3: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line4: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line5: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line6: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line7: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line8: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line9: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line10 data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line11: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line12: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line13: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line14: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line15: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line16: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line17: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line18: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line19: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line 20 { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line21 data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line22 data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line23 data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line24: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line25: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line26 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line27: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line29 data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line30: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line32: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line33: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line34: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line35: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line36: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line38: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line39: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line40: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line42 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line43: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line44: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line45: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line46: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line47: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line48: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line49: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line50: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line51: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line52: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line53: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line55: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line56: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line57: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line58: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line59: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line60 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line61: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line63: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line65 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line66 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line67: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line69: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line70: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line72 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line73: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line74: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line75: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line76: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line77: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line78: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line79: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line80: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line81: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line82: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line84: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line85: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line86: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line87: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line88: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line89: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line90: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line91: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line92: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line93: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line94: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line95: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line98: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line99: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line100: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line104: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line105: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line106: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line107: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line110: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: }' ]; #### my @matches = $pdus =~ /\{ (?: (?R) | [^{}]+ )+ \}/gx; __END__ $VAR1 = [ '{ [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line2: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line3: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line4: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line5: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line6: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line7: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line8: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line9: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line10 data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line11: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line12: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line13: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line14: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line15: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line16: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line17: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line18: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line19: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line 20 { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line21 data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line22 data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line23 data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line24: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line25: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line26 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line27: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line29 data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line30: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line32: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line33: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line34: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line35: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line36: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line38: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line39: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line40: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line42 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line43: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line44: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line45: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line46: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line47: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line48: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line49: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line50: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line51: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line52: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line53: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line55: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line56: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line57: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line58: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line59: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line60 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line61: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line63: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line65 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line66 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line67: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line69: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line70: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line72 = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line73: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line74: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line75: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line76: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line77: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line78: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line79: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line80: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line81: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line82: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line84: data = { [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line85: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line86: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line87: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line88: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line89: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line90: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line91: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line92: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line93: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line94: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line95: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line98: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line99: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line100: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line104: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line105: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line106: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line107: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: } [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: line110: data [ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: }' ]; #### #!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub fileParse { my ( @files ) = @_; my $refHash = {}; open(my $fh, '<' , $files[0]) or die "Could not open file '$files[0]' $!"; my $pdus = do { local $/; <$fh> }; close $fh or die "Could not close file '$files[0]' $!"; chomp( $pdus ); # my @matches = $pdus =~ /\{ (?: (?R) | [^{}]+ )+ \}/gx; my @matches = $pdus =~ /[^{}]+ | \{ (?: (?R) | [^{}]+ )+ \} /gx; # Trim leading and trailing white spaces s/^\s+|\s+$//g for (@matches); %{$refHash} = @matches; return $refHash; } my $final = fileParse( @ARGV ); my @sorted = (); push @sorted, $_ for (sort keys %{$final}); print Dumper \@sorted; __END__ $VAR1 = [ '[ 11] 25/2/2017-19:02:06.980 proces_name thanos-Rx: UDT', '[ 12] 25/2/2017-19:02:06.996 proces_name thanos-Tx: UDT', '[ 13] 25/2/2017-19:02:07.185 proces_name thanos-Rx: UDT', '[ 14] 25/2/2017-19:02:07.227 proces_name thanos-Tx: UDT', '[ 17] 25/2/2017-19:02:07.413 proces_name thanos-Tx: UDT', '[ 18] 25/2/2017-19:02:09.794 proces_name thanos-Rx: UDT' ];