Umbenennen von Dateielementen mit Klammern

Umbenennen von Dateielementen mit Klammern

Ich verwende macOS X und gebe dies in das Terminal ein, um einige Dinge umzubenennen:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject()/newObject("green")/g;' {} \;

Dadurch sollten alle umbenannt werden:

getGreenObject()

mit

newObject("green")

Aber es hat getGreenObject() durch Folgendes ersetzt:

newObject("green")()

was zu zahlreichen Fehlern geführt hat. Es scheint, dass der Befehl die öffnenden und schließenden Klammern „()“ nicht erkennt?

Wie kann ich all diese Fehler jetzt mit demselben Befehl beheben?

Antwort1

Die Klammern werden als Teil der Syntax für reguläre Ausdrücke behandelt (sie geben an, dass ihr Inhalt als Gruppe behandelt werden soll) und nicht als zu vergleichende Literalzeichen. Um dem Parser für reguläre Ausdrücke mitzuteilen, dass er sie als Literalzeichen behandeln soll, können Sie sie mit Backslashs maskieren:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject\(\)/newObject("green")/g;' {} \;

Nun: Haben Sie ein Backup von vor diesem Vorfall, sodass Sie zurückgehen und es noch einmal versuchen können? Wenn Sie Massenänderungen wie diese vornehmen, sollten Sie immer sicherstellen, dass Ihr Backup auf dem neuesten Stand ist (Sie haben doch ein Backup, oder?), und auch einen kleinen Test durchführen, bevor Sie es auf Ihrer Hauptcodebasis freigeben.

Wenn Sie über kein Backup verfügen, auf das Sie zurückgreifen können, können Sie das Problem wahrscheinlich folgendermaßen beheben:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/newObject\("green"\)\(\)/newObject("green")/g;' {} \;

Beachten Sie, dass ich wahrscheinlich gesagt habe. Hier gelten die gleichen Empfehlungen: Stellen Sie zunächst sicher, dass Sie ein aktuelles Backup haben, und testen Sie es zunächst an einigen Dateien. Ich binnichtverantwortlich, wenn dadurch Ihre Codebasis unwiderruflich zerstört wird.

verwandte Informationen