Jai essayé de créer une chaîne de commande de recherche qui trouvera tous les fichiers qui se terminent par un nombre 1-99 mais en excluent tous les autres .
par exemple Je veux trouver myfile1 myfile99 mais pas myfile456 et non myfilebackup
Lexpression régulière à laquelle je » pense est myfile[1-9]{1,2}
mais je ne peux « pas faire fonctionner cela avec find.
find . -regex ".*myfile[0-9]{1,2}"
OU find . -iname "myfile[0-9]{1,2}"
Daprès ce que je peux voir, cest la partie {1,2}
qui ne fonctionne pas.
(au fait pouvez-vous utiliser -name -regex
de manière interchangeable?)
Toute aide appréciée.
Commentaires
Réponse
Vous pouvez essayer
find . -regex ".*myfile[0-9][0-9]?"
ou
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Commentaires
- Merci – la première ligne est worki ng pour moi. Javais essayé ceci avec -iname mais je ne pense ' que cela prend en charge la syntaxe ou bien je ' fais quelque chose de mal.
Réponse
Si vous avez GNU find, vous pouvez utiliser un autre type dexpression régulière:
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
Selon GNU find
utilise un castré Syntaxe des expressions régulières Emacs par défaut – Emacs prend en charge la syntaxe \{from,to\}
, mais au moins GNU find
ne la prend pas en charge.
Étrangement, le manuel de référence ninclut pas de section sur la syntaxe des expressions régulières sed
, alors qui sait quelles parties de celle-ci sont pris en charge.
Commentaires
-
sed
likeed
semble être un alias pourposix-basic
, donc devrait être compatible avec POSIX BRE (même si prend en charge certains ex des tensions comme\+
). Il ' nest pas compatible avec GNUsed
où par exemple[\n]
correspond à une nouvelle ligne au lieu de la barre oblique inverse oun
requis par POSIX. Voir aussi-regextype posix-extended
pour les ERE POSIX (donc.*myfile[0-9]{1,2}
), également avec des extensions comme\s
ou\<
- Je nai jamais connu -regextype. Il semble que si vous utilisez
-regextype egrep
, il semble que vous puissiez éviter les contre-obliques.
-iname
(et-name
) utilisent des globs , ce qui nont pas cette syntaxe.