#!/usr/bin/perl -l
# http://perlmonks.org/?node_id=1173958
use strict;
use warnings;
my @data = <DATA>;
my $numbers = '';
$numbers |= $_ for "@data" =~ /\d+/g;
my $length = length $numbers;
my %packages;
@packages{ /^([\w-]+)/ } = $_ for
map $_->[0],
sort { $a->[1] cmp $b->[1] }
map [ $_, s/\d+/ sprintf "%0${length}d", $& /ger ], @data;
print sort values %packages;
__DATA__
samba-common-libs-4.2.10-6.2.el7_2.x86_64
samba-common-libs-4.2.10-8.el7_2.x86_64
samba-common-libs-4.2.12-7.el7_2.x86_64
samba-common-libs-4.2.10-6.el7_2.x86_64
samba-common-libs-4.2.10-3.el7_2.x86_64
xyz-libs-4.2.10-7.el7_2.x86_64
xyz-libs-4.2.12-7.el7_2.x86_64
xyz-libs-4.2.13-7.el7_2.x86_64
xyz-libs-4.2.11-7.el7_2.x86_64
abc-4.2.11-7.el7_2.x86_64
abc-4.2.11-8.el7_2.x86_64
abc-4.2.11-6.el7_2.x86_64
prints:
abc-4.2.11-8.el7_2.x86_64
samba-common-libs-4.2.12-7.el7_2.x86_64
xyz-libs-4.2.13-7.el7_2.x86_64