https://git.spwbk.site/swatson/yt-track-split/raw/master/sanitize_tl.pl
___________________________________
#!/usr/bin/perl

# Move time codes to end of each line
# and clean some other stuff up if needed

use strict;
use warnings;

if ( ! defined $ARGV[0] ) {
	print "Need to pass track list\n";
	exit 1;
}

my $file = shift(@ARGV);

foreach my $line ( split("\n", `cat $file`) ) {
	chomp $line;
	if ( $line =~ m/([0-9]{2}:[0-9]{2}|[0-9]{1,2}:[0-9]{2}:[0-9]{2})/ ) {
		my $time_code = $1;
		$line =~ s/ $time_code//g;
		$line = $line . " " . $time_code;
	}

	if ( $line !~ m/^[0-9]{1,2}\./ ) {
		$line =~ s/^([0-9]{1,2})//g;
		my $track_number = $1;
		$line = "$track_number" . "." . "$line";
	}

	my $sanitized_line;
	open(my $fh, ">>", \$sanitized_line);
	my @line_chars = split("",$line);
	foreach my $char ( @line_chars ) {
		if ( $char !~ m/[a-zA-Z0-9:\s\.-]/ ) {
			$char = "";
			print $fh "$char";
		} else {
			print $fh "$char";
		}
	}

	close $fh;
	print "$sanitized_line\n";

}