La pregunta pedía expresiones regulares. Bash, y por lo tanto ls, no admite expresiones regulares aquí. Lo que admite son expresiones de nombre de archivo ( Globbing ), una forma de comodines. Las expresiones regulares son mucho más poderosas que eso.
Si realmente quieres usar expresiones regulares, puedes usar find -regexasí:
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt'
Buscar es recursivo por defecto, pero lsno lo es. Para buscar solo archivos en el directorio actual, puede deshabilitar la recursividad con -maxdepth 1. Encuentra coincidencias con el nombre del archivo con la ruta, por eso los nombres de los archivos comienzan ./si ejecutas find in .. La expresión regular comienza con \./hacer frente a eso. Tenga en cuenta que en una expresión regular, .es un carácter especial que coincide con cualquier carácter, pero aquí realmente queremos un punto, por eso nos escapamos con una barra invertida. Hacemos lo mismo para el punto .txt, porque la expresión regular también coincidiría Atxt. Las clases de dígitos son las mismas que para globbing, solo que necesita en ^lugar de !invertir la clase de caracteres.
Si desea obtener la salida de ls, entonces puede usar -exec lsasí:
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt' -exec ls -lah {} \;
findadmite un par de diferentes sabores de expresiones regulares. Puede especificar un -regextype, por ejemplo:
find . -maxdepth 1 -regextype egrep -regex '\./.*[^0-9][0-9]\.txt'
Para mí, los tipos posibles son: 'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic' , 'posix-egrep', 'posix-extended', 'posix-minimal-basic', 'sed' Puede ejecutar find -regextype helppara averiguar qué es compatible con su sistema.
shopt -s extglob.