Benennen Sie Dateien in Linux mithilfe des Regex-Musters um

Benennen Sie Dateien in Linux mithilfe des Regex-Musters um

Ich möchte viele Dateien umbenennen wie

Tum Hi Ho [www.DJMaza.Com].mp3ZuTum Hi Ho.mp3

Dazu habe ich diesen Befehl verwendet. Aber irgendwie funktioniert es nicht.

`rename -n 's/(.*)([.*])(\.mp3)/$1$3/' *.mp3`

Antwort1

Sie waren nah dran, aber nicht ganz:

rename -n 's/\[[^\]]+\]//' *.mp3

Das Problem ist, dass es []sich um eine spezielle Regex-Konstruktion handelt und die Klammern daher maskiert werden müssen, wenn sie mit den tatsächlichen Klammern übereinstimmen sollen. Das ist der Zweck der Backslashes in meiner Version.

Die nicht maskierten Klammern bilden eine sogenannte Zeichenklasse. Eine Zeichenklasse kann grundsätzlich mit jedem Zeichen innerhalb der Klammern übereinstimmen. Dies trifft also auf einen Punkt oder ein Sternchen zu. Wenn Sie am Anfang einer Klasse [.*]ein Zirkumflex ( ) hinzufügen , stimmt es mit jedem Zeichen überein.^nichtinnerhalb der Klammern.

In meinem regulären Ausdruck gleichen wir eine öffnende Klammer \[plus ein oder mehrere Zeichen ab, die keine schließende Klammer sind, [^\]]+plus eine schließende Klammer \]und entfernen das alles.

verwandte Informationen