Dateielement umbenennen mit Klammern

522
kay

Ich benutze macOS X und gebe dies in das Terminal ein, um einige Sachen umzubenennen:

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

Welches sollte alles umbenennen:

getGreenObject() 

mit

newObject("green") 

Was er jedoch tat, war getGreenObject () durch Folgendes zu ersetzen:

newObject("green")() 

was zu Tonnen von Fehlern geführt hat. Es scheint, dass der Befehl "()" die offenen und schließenden Klammern nicht erkennt.

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

0

1 Antwort auf die Frage

1
Gordon Davisson

Die Klammern werden als Teil der Syntax für reguläre Ausdrücke behandelt (sie zeigen an, dass ihr Inhalt als Gruppe behandelt werden sollte) und nicht als zu vergleichende Literalzeichen. Um dem Parser für reguläre Ausdrücke zu sagen, dass er sie als wörtliche Zeichen behandeln soll, können Sie sie mit Backslashes umgehen:

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, bevor dies geschehen ist, so dass Sie zurückgehen und es noch einmal versuchen können? Wenn Sie solche Massenänderungen vornehmen, sollten Sie immer sicherstellen, dass Ihre Sicherung auf dem neuesten Stand ist (Sie haben eine Sicherung, oder?), Und führen Sie auch einen kleinen Test durch, bevor Sie sie auf Ihrer Hauptcodebasis loslassen.

Wenn Sie nicht über ein Backup verfügen, zu dem Sie zurückkehren können, können Sie es 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 über ein aktuelles Backup verfügen, und testen Sie es zuerst an einigen Dateien. Ich bin nicht dafür verantwortlich, wenn Ihre Codebasis dadurch irreversibel zerstört wird.