Mañana,
El proyecto actual en el que tengo que trabajar tenía un esquema de nombres anterior que me molesta ...
Base.v2.c
Base.v2a.c
Slider.v4a.h
Area.v2a.2.h
Me dijeron que la "a" en la versión era identificar versiones "alfa" que necesitaban más trabajo. En esta etapa del proyecto, puedo eliminar la "a" y reemplazarla por una ".1" (v2a -> v2.1).
Hay muchos archivos, más allá de lo que estoy dispuesto a hacer manualmente.
Sé que podría usar el comando rename para cambiar el nombre de todos los archivos a la vez, pero me encuentro con un problema sobre cómo hacerlo. Si uso algo como:
rename 's/[0-9]a/.1/' *
entonces perderé el último dígito del número de versión. ¿Hay alguna forma de cambiar el nombre (u otra herramienta de línea de comando) para recordar parte de la expresión regular utilizada para encontrar el archivo? De modo que '[0-9] a' a '[0-9] .1' cambiaría 1a a 1.1, y 4a a 4.1, etc.
fuente
v2a < v2 < 2.1
. En otras palabras, la versión dos alfa representa la versión anterior a la versión dos, no la versión posterior. Sería mejor cambiarle el nombre a versión1.99
, o algo similar.Respuestas:
Puede usar grupos de captura :
O puede usar un vistazo atrás :
O, de forma similar a una mirada atrás, la afirmación de longitud 0
\K
, que significa "olvidar todo lo que coincidió hasta este punto":Tenga en cuenta que usé el más corto en
\d
lugar de[0-9]
. Los dos son equivalentes, perorename
es un script perl, por lo que comprende la sintaxis de las expresiones regulares compatibles con Perl (PCRE).Tenga en cuenta que esto solo cambiará la primera aparición de un número seguido de un
a
. Esto puede o no ser lo que necesita, dependiendo de los nombres de sus archivos.Las
-n
marcasrename
muestran lo que haría sin realmente hacer nada. una vez que haya confirmado que funciona como se esperaba, elimínelo para cambiar realmente los nombres de archivo.fuente
Modifique el comando de esta manera:
s/<souce>/<replacement>/
reemplazará la cadena de origen (que podría ser una expresión regular) con la cadena de reemplazo.(regexp)
,(string)
, etc. serán asignados como valores de las variables sucesivas:$1
,$2
, etc ..$1
se expandirá con su valor, que en este caso debe coincidir con la expresión regular[0-9]
.fuente