Reordering Nessus HTML output

I’ve been irritated by Nessus’s HTML output one too many times. I hate the fact that the list by host is in random order. Who thought that was a good idea?

open F, "<index.html";
my @R = <F>;
close F;

my $R = join '',@R;

my ($one, $two) = split /Notes.+?<tr>/s, $R;
my ($two, $three) = ($two =~ m!(.*)(</tr>.</table>.*$)!s);

my @O = split /</tr>.<tr>/si, $two;
my @X = join '</tr><tr>', (sort by_ip @O);
print $one, '<tr>',@X, $three;

sub by_ip {
    my @a = $a =~ /(d+).(d+).(d+).(d+)/;
    my @b = $b =~ /(d+).(d+).(d+).(d+)/;
    $a[0] <=> $b[0] ||
    $a[1] <=> $b[1] ||
    $a[2] <=> $b[2] ||
    $a[3] <=> $b[3] ||
    $a     <=>  $b

The list should now be ordered first by hostname, and then by IP address. Share and enjoy.