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