La question demandait des expressions régulières. Bash, et donc ls, ne prend pas en charge les expressions régulières ici. Il prend en charge les expressions de nom de fichier ( Globbing ), une forme de caractères génériques. Les expressions régulières sont beaucoup plus puissantes que cela.
Si vous voulez vraiment utiliser des expressions régulières, vous pouvez utiliser find -regexcomme ceci:
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt'
La recherche est récursive par défaut, mais lsne l'est pas. Pour rechercher uniquement des fichiers dans le répertoire en cours, vous pouvez désactiver la récursivité avec -maxdepth 1. Trouver des correspondances avec le nom de fichier avec chemin d'accès, c'est pourquoi les noms de fichiers commencent par ./si vous exécutez find in .. Le regex commence par \./faire face à cela. Notez que dans une expression régulière, .est un caractère spécial correspondant à n'importe quel caractère, mais ici, nous voulons vraiment un point, c'est pourquoi nous l'échappons avec une barre oblique inverse. Nous faisons la même chose pour le point dedans .txt, car autrement l'expression régulière correspondrait également Atxt. Les classes de chiffres sont les mêmes que pour la globalisation, juste ce dont vous avez besoin ^au lieu d' !inverser la classe de caractères.
Si vous voulez obtenir la sortie de ls, vous pouvez utiliser -exec lscomme ceci:
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt' -exec ls -lah {} \;
findprend en charge plusieurs saveurs regex différentes. Vous pouvez spécifier un -regextype, par exemple:
find . -maxdepth 1 -regextype egrep -regex '\./.*[^0-9][0-9]\.txt'
Pour moi, les types possibles sont: 'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic' , 'posix-egrep', 'posix-extended', 'posix-minimal-basic', 'sed' Vous pouvez exécuter find -regextype helppour découvrir ce qui est pris en charge sur votre système.
shopt -s extglob.