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.