O motivo é porque ao usar a classificação numérica, as sequências sem números são tratadas como zero. A classificação GNU acerta o comportamento, mas não faz comentários sobre o motivo. A página man on illumos do tipo SunOS fornece uma explicação:
-n
Restricts the sort key to an initial numeric string, consisting of optional blank characters, optional minus sign, and zero or more digits with an optional radix character and thousands separators (as defined in the current locale), which is sorted by arithmetic value. An empty digit string is treated as zero. Leading zeros and signs on zeros do not affect ordering.
Esse comportamento também é especificado no SUSv4 e no POSIX.1-2008 ( link ), usando o mesmo palavreado que a página do homem illumos.
A classificação GNU também possui -g
, "classificação numérica geral", que classifica por números de ponto flutuante em vez de números inteiros, em que as sequências de dígitos vazios são classificadas antes de zero. Não tenho certeza se isso é um efeito colateral ou intencional. No entanto, -g
vem com um aviso, pois é significativamente mais lento que -n
. Se você estiver classificando um conjunto de dados grande ou fazendo qualquer coisa que os usuários estejam esperando, você deve evitar -g
.