linux find regex

J’ai du mal à utiliser le regex de la commande find . Probablement quelque chose que je ne comprends pas à propos de s’échapper sur la ligne de commande.

Pourquoi ne sont-ils pas les mêmes?

 find -regex '.*[1234567890]' find -regex '.*[[:digit:]]' 

Bash, Ubuntu

Les expressions régulières avec des classes de caractères (par exemple, [[:digit:]] ) ne sont pas sockets en charge dans la syntaxe d’expression régulière par défaut utilisée par find . Vous devez spécifier un type de regex différent, tel que posix-extended pour pouvoir les utiliser.

Jetez un coup d’oeil à la documentation de l’ expression régulière de GNU Find qui vous montre tous les types de regex et ce qu’ils supportent.

Vous devriez jeter un oeil à l’argument -regextype de find , voir la page de manuel :

  -regextype type Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the command line. Currently-implemented types are emacs (this is the default), posix-awk, posix-basic, posix-egrep and posix-extended. 

Je suppose que le type emacs ne supporte pas la construction [[:digit:]] . Je l’ai essayé avec posix-extended et cela a fonctionné comme prévu:

 find -regextype posix-extended -regex '.*[1234567890]' find -regextype posix-extended -regex '.*[[:digit:]]' 

Notez que -regex dépend du chemin complet.

  -regex pattern File name matches regular expression pattern. This is a match on the whole path, not a search. 

Vous n’êtes pas obligé d’utiliser -regex pour ce que vous faites.

 find . -iname "*[0-9]" 

Eh bien, vous pouvez essayer ceci '.*[0-9]'