Je ne parviens pas à utiliser l'expression régulière de la commande find
. Probablement quelque chose que je ne comprends pas à propos d'échapper à la ligne de commande.
Pourquoi ne sont-ils pas les mêmes?
find -regex '.*[1234567890]'
find -regex '.*[[:digit:]]'
Bash, Ubuntu
Expressions régulières avec des classes de caractères (par exemple, [[:digit:]]
) ne sont pas pris 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
afin de les utiliser.
Jetez un oeil à GNU L'expression régulière de Find documentation ), qui vous montre tous les types de regex et ce qu'ils supportent.
Vous devriez regarder le -regextype
argument de find
, voir 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.
J'imagine que le type emacs
ne prend pas en charge le [[:digit:]]
construire. 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 entier.
-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]'