regex - book - introduction to modern information retrieval




Linux trouver regex (3)

J'ai des problèmes pour utiliser la regex de la commande find . Probablement quelque chose que je ne comprends pas d'échapper sur la ligne de commande.

Pourquoi ne sont-ils pas les mêmes?

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

Bash, Ubuntu


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


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

Jetez un coup d'œil à la documentation 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 sur l'argument -regextype de find , voir manpage :

      -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:]]'






find