2 votes

Utilisation de find avec regex pour trouver un nom de fichier qui commence par un chiffre du mois

J'essaie d'utiliser la recherche avec regex pour trouver tous les fichiers qui commencent par un nombre qui serait dans la gamme d'un jour du mois ( 01 .. 31 ).

Cela ne fonctionne pas

find . -type f -regex '[0-3][0-9]*'

Quelle est une expression rationnelle permettant de limiter les deux premiers chiffres à la plage 1..31 , mais si le jour est inférieur à dix, elle est limitée à deux chiffres ( 01, 02.. ) et ainsi de suite, et utilisée avec la commande find ?

J'ai essayé de nombreuses choses, regardé d'autres articles de stackoverflow et aucune solution mentionnée dans les autres articles ne fonctionne.

3voto

w3d Points 3138

Regex n'est pas bon pour exprimer des plages de nombres comme celle-ci. Vous devez le décomposer et faire correspondre chaque motif séparément, c'est-à-dire en commençant par 0 , 1 y 2 , 3

Par exemple :

^(0[1-9]|[12][0-9]|3[01])

1voto

Tim Biegeleisen Points 53335

Vous pouvez essayer d'utiliser le modèle regex suivant :

^(3[01]|[12][0-9]|0[1-9])$

Votre commande Linux :

find . -type f -regex '^(3[01]|[12][0-9]|0[1-9])$'

Voici une explication du motif regex :

^(             start of input
    3[01]      match 30 or 31
    |          OR
    [12][0-9]  match 10-29
    |          OR
    0[1-9]     match 01-09
)$             end of input

Démo

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X