Como é isso?
printf "%-4.4s\n" ????-* | uniq
O shell expande o curinga em ordem alfabética e passa o resultado como argumentos para printf
. A string de formato trunca cada argumento para quatro caracteres e adiciona uma nova linha. Agora tudo o que resta é remover duplicatas adjacentes.
Se você não sabe o número de dígitos antes do hífen, mas tem uma ideia, pode passar por cima de alguns candidatos:
for expr in '??' '???' '????' '?????' # Quoted (!)
do
printf "%-${#expr}.${#expr}\n" $expr-* | # Unquoted!
uniq
done
Isso usa a expansão de parâmetro $[#var}
.
Observe o truque de citar os curingas para evitar sua expansão na inicialização do loop, usando a variável não citada dentro do loop (que é um não-não na maioria dos outros casos).