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 -regex
así:
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt'
Buscar es recursivo por defecto, pero ls
no 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 ls
así:
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt' -exec ls -lah {} \;
find
admite 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 help
para averiguar qué es compatible con su sistema.
shopt -s extglob
.