tente
string='TestTest12312313'
printf '%s\n' ${string%??}-{1..100}
O ${parameter%word}
é Expansão do Parâmetro da Shell e exclui os dois últimos caracteres de seu parâmetro.
Acima você pode ajustar o número 100 com qualquer número que você queira continuar a imprimir.
Se você quiser repetir a impressão da string com exatamente os dois últimos dígitos que a sua string termina, você pode fazer o seguinte:
string='testString07'
eval printf '%s\n' ${string%??}-{1..${string:((${#string}-2))}}
testString-01
testString-02
testString-03
testString-04
testString-05
testString-06
testString-07
Esta sintaxe ${string:((${#string}-2))}
é proveniente de Expansão de subcadeia do shell ${parameter:startPosition:length}
(se length
omitido, ele retornará de startPOsition
para o final.) startPosition é ((${#string}-2))
, que retorna o comprimento em caracteres de seu string
como parâmetro menos 2.
Bem, isso também seria simplificado para:
eval printf '%s\n' ${string%??}-{1..${string#${string%??}}}
se for um arquivo e não uma única string, sugiro usar awk
da seguinte forma:
awk -F'..$' '{print $1"-"NR}' infile
isto está definindo o separador de campo do awk com dois últimos caracteres de cada linha (é ..$
um regex que corresponde apenas a dois caracteres no final da linha) e então estamos imprimindo o primeiro campo e seu N umber de R ecord delimitado com hífen. Isso seria encurtado para:
awk -F'..$' '$0=$1"-"NR' infile