Eu encontrei uma solução usando a função awk do GNU match :
cat foos | \
gawk 'match($0, /([^0-9]+)([0-9]+)([^0-9]+)/, a) {print a[3], a[2], $0}' | \
sort | cut -d' ' -f3
O comando gawk usa capturas de expressão regular para gerar a chave de classificação, para que eu termine com o seguinte:
a 03 foo03a
b 02 foo02b
... etc.
Execute isso por meio de sort , cut para os campos desejados. Feito.