Morgen,
Das aktuelle Projekt, an dem ich arbeiten muss, hatte ein vorheriges Namensschema, das mich stört ...
Base.v2.c
Base.v2a.c
Slider.v4a.h
Area.v2a.2.h
Mir wurde gesagt, dass das "a" in der Version "Alpha" -Versionen identifizieren soll, die mehr Arbeit benötigen. In dieser Phase des Projekts kann ich das "a" entfernen und durch ein ".1" ersetzen (v2a -> v2.1).
Es gibt viele Dateien, die über das hinausgehen, was ich manuell tun möchte.
Ich weiß, dass ich den Befehl umbenennen verwenden kann, um alle Dateien gleichzeitig umzubenennen, aber ich habe ein Problem damit. Wenn ich so etwas benutze wie:
rename 's/[0-9]a/.1/' *
dann werde ich die letzte Ziffer der Versionsnummer verlieren. Gibt es eine Möglichkeit, das Umbenennen (oder ein anderes Befehlszeilentool) an einen Teil des regulären Ausdrucks zu erinnern, der zum Suchen der Datei verwendet wurde? Damit '[0-9] a' zu '[0-9] .1' 1a zu 1.1 und 4a zu 4.1 usw. ändert.
quelle
v2a < v2 < 2.1
. Mit anderen Worten, Version zwei-Alpha repräsentiert die Version, die zu Version zwei führt, nicht die Version danach. Es wäre besser, es in Version1.99
oder ähnliches umzubenennen .Antworten:
Sie können entweder Erfassungsgruppen verwenden :
Oder Sie können ein Lookbehind verwenden :
Oder, ähnlich wie bei einem Lookbehind, die Behauptung
\K
mit der Länge 0 , was bedeutet, dass "alles vergessen wurde, was bis zu diesem Punkt übereinstimmt":Beachten Sie, dass ich die kürzere
\d
anstelle von verwendet habe[0-9]
. Die beiden sind gleichwertig, stellen jedochrename
ein Perl-Skript dar und verstehen daher die Syntax von Perl Compatible Regular Expressions (PCRE).Beachten Sie, dass dies nur das erste Auftreten einer Zahl gefolgt von einem ändert
a
. Dies kann abhängig von Ihren Dateinamen sein oder auch nicht.Die
-n
Markenrename
zeigen, was es tun würde, ohne etwas zu tun. Wenn Sie bestätigt haben, dass es wie erwartet funktioniert, entfernen Sie es, um die Dateinamen tatsächlich zu ändern.quelle
Ändern Sie den Befehl folgendermaßen:
s/<souce>/<replacement>/
ersetzt die Quellzeichenfolge (die ein regulärer Ausdruck sein kann) durch die Ersetzungszeichenfolge.(regexp)
,(string)
usw. werden als Werte von aufeinanderfolgenden Variablen zugewiesen werden:$1
,$2
, etc ..$1
also um ihren Wert erweitert, der in diesem Fall mit dem regulären Ausdruck übereinstimmen muss[0-9]
.quelle