Что вам нужно сделать, это скопировать дату вперед, а затем отсортировать, которая по умолчанию будет использовать всю строку в качестве ключа сортировки. Затем снова удалите дату.
Я использовал sed, чтобы выбрать все до (последней) даты, которую я нашел по ее формату nnnn-nn-nn, и скопировать дату на передний план.
После сортировки просто используйте sed (или было бы проще вырезать -c11-), чтобы снова удалить дату с фронта.
Это работает в Linux:
sed 's/^\(.* \([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] \)\)/\2\1/' |
sort |
sed 's/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] //'
Предоставление:
12:00AM JACK SPARROW PIRATE 1886-09-07 I like Pizza Hut and DOminoz
11:00AM JOHN STAMOS 1983-08-07 I like Pizza Hut
11:00AM SANTA 1986-04-01 I like cold beer
Это работает для ваших данных, но может легко стать довольно неловким, если ваши данные изменятся (например, у вас есть несколько дат в строке).