Wie man den Wert eines regulären Ausdrucks wiederherstellt

275
AFP_555

Ich bin nicht sicher, ob ich den richtigen Weg frage oder ob es überhaupt möglich ist. Ich möchte den Namen einiger Dateien unter ihrem eigenen Namen ändern.

Nehmen wir an, ich habe file1, file2 und file3. Ich möchte etwas tun wie:

mv file* file_xyz 

Um zu erhalten: file1_xyz, file2_xyz und file3_xyz

0

1 Antwort auf die Frage

1
grawity

Es gibt Tools, die einen Regex-Such- und Ersetzungsvorgang auf den gesamten Dateinamen anwenden können, zB perl-rename(auch häufig genannt prename). In solchen Tools würden Sie mehrere Ziffern mit \d+oder [0-9]+innerhalb einer "Erfassungsgruppe" (Klammern) abgleichen und später mit $1oder \1abhängig vom Programm darauf verweisen .

Zum Beispiel:

prename -v 's/file(\d+)$/file$1_xyz/' file[123]  prename -v 's/(file\d+)$/$1_xyz/' file[123] 

(Mit dieser -vOption werden die Änderungen durch den Vornamensdruck ausgedruckt. Sie können die -nÄnderungen verwenden, ohne tatsächlich etwas umzubenennen .)

Sie können dies auch mit mvund erreichen sed:

for old in file[123]; do new=$(sed -r 's/file([0-9]+)$/file\1_xyz/' <<< "$old") mv -v "$old" "$new" done 

Aber wenn Sie genau hinschauen, brauchen Sie die Nummer nicht. Alles, was Sie tun, ist sowieso etwas statischen Text anzufügen:

prename 's/$/_xyz/' file[123]  for f in file[123]; do mv "$f" "$_xyz" done