É uma pena que você não possa fazer uma correspondência global no bash. Você pode fazer isso:
global_rematch() {
local s=$1 regex=$2
while [[ $s =~ $regex ]]; do
echo "${BASH_REMATCH[1]}"
s=${s#*"${BASH_REMATCH[1]}"}
done
}
global_rematch "$mystring1" "$regex"
1BBBBBB
2AAAAAAA
Isso funciona cortando o prefixo correspondente da string para que a próxima parte possa ser correspondida. Ele destrói a string, mas na função é uma variável local, então quem se importa.
Eu realmente usaria essa função para preencher uma matriz:
$ mapfile -t matches < <( global_rematch "$mystring1" "$regex" )
$ printf "%s\n" "${matches[@]}"
1BBBBBB
2AAAAAAA