A parte [a-z] não é o que corresponde ao número; é o * . Você pode estar confundindo expressões globbing e regulares / a>.
Ferramentas como grep aceitam vários tipos de regexes ( básico por padrão, -E para estendido, -P para regex Perl )
Por exemplo ( -v inverte o jogo)
$ ls a_[a-z]*_data | grep -v "[0-9]"
a_clean_data
Se você quiser usar um regex bash, aqui está um exemplo de como testar se a variável $ref é um inteiro:
re='^[0-9]+$'
if ! [[ $ref =~ $re ]] ; then
echo "error"
fi