2 votes

Regex renommer un nom de fichier en utilisant la commande linux rename

J'essaie de renommer un fichier first_second.pdf en first_0second.pdf

Je me suis donc renseigné sur la capture et la référence arrière. Mais d'une manière ou d'une autre, cela ne fonctionne pas. Quelqu'un peut-il me dire ce que je fais de travers ?

rename 's/\(.*_\)\([1-9]\).pdf$/$10$2.pdf/' first_1.pdf

Je m'attends à ce que le fichier first_1.pdf soit renommé en first_01.pdf.

1voto

Gary_W Points 6331

En -n L'argument vous montre ce qu'il va faire sans le faire réellement, ce qui est bon pour les tests. La correspondance et la capture de la première partie jusqu'au trait de soulignement inclus. Ensuite, faire correspondre et capturer 1 ou plusieurs nombres suivis par le point littéral et tout ce qui est autre jusqu'à la fin de la ligne. Remplacez par le premier groupe capturé (des accolades entourent le numéro de groupe afin de le séparer du "0" littéral), un "0" littéral, puis les deux groupes capturés restants.

rename -n 's/(.*_)([0-9]+)(\..*)$/${1}0$2$3/' first_1.pdf

rename(first_1.pdf, first_01.pdf)

0voto

infoclogged Points 1036

Le problème était le caractère d'échappement et les crochets entourant les références de retour. C'est parce que rename utilise en interne posix-extended. Le caractère d'échappement aurait été nécessaire si rename avait utilisé posix-basic comme type de regext.

En supprimant les échappements et en ajoutant des parenthèses curly pour les références arrière, l'expression regex a fonctionné.

rename 's/(.*_)([1-9]).pdf$/${1}0${2}.pdf/' first_1.pdf

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