Combine apenas 2 e capture tudo além de .* :
[[ $string =~ 2(.*) ]] && echo "${BASH_REMATCH[1]}"
Exemplo:
$ string="ananas1kiwi2apple1banana2tree"
$ [[ $string =~ 2(.*) ]] && echo "${BASH_REMATCH[1]}"
apple1banana2tree
Qual é o problema com o seu:
-
.*é ganancioso, corresponde à última2quando você usa.*2, para não ter ganância (como.*?não está disponível em ERE) use[^2]*2 -
Também
{1,}é apenas+
Então faça:
[[ $string =~ [^2]*2([[:alnum:]]+) ]]
Em qualquer caso, não é necessário fazer a correspondência desde o início, apenas faça:
[[ $string =~ 2([[:alnum:]]+) ]]