É tão ganancioso quanto possível.
O primeiro padrão ("qualquer dígito zero ou mais vezes") corresponde a todos os lugares, mas apenas uma vez em seu exemplo, porque não há sinalizador g
.
Compare:
$ echo foobar123 | sed 's/[0-9]*/(&)/g'
()f()o()o()b()a()r(123)
Note como ele se torna ganancioso assim que pode, ou seja, há dígitos dos quais mais do que zero podem ser consumidos.
A mesma coisa para o segundo padrão ("qualquer dígito único, mais qualquer dígito zero ou mais vezes"). Ele não pode corresponder em nenhum lugar antes do 123
. Uma vez lá, consome o maior número possível.