Zmiana nazwy pliku w nawiasach

0

Używam macOS X, wprowadzając to do terminala, aby zmienić nazwy niektórych rzeczy:

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

Które powinny zmienić nazwę wszystkich:

getGreenObject()

z

newObject("green")

ale to, co zrobił, było zastąpienie getGreenObject () tym:

newObject("green")()

co spowodowało mnóstwo błędów. Wydaje się, że polecenie nie rozpoznaje „()” otwartych i zamkniętych nawiasów?

Jak mogę naprawić wszystkie te błędy teraz za pomocą tego samego polecenia?

kay
źródło

Odpowiedzi:

1

Nawiasy są traktowane jako część składni wyrażeń regularnych (wskazują, że ich zawartość powinna być traktowana jako grupa), a nie jako dosłowne znaki do dopasowania. Aby powiedzieć parsera wyrażeń regularnych, aby traktował je jako znaki dosłowne, możesz uciec z nich za pomocą odwrotnych ukośników:

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

Teraz: czy masz kopię zapasową przed tym wydarzeniem, więc możesz wrócić i spróbować ponownie? Podczas wykonywania takiej zmiany masy zawsze powinieneś upewnić się, że twoja kopia zapasowa jest aktualna (masz kopię zapasową, prawda?), A także przeprowadzić mały test przed wyłączeniem go na głównej bazie kodu.

Jeśli nie masz kopii zapasowej, do której możesz wrócić, prawdopodobnie możesz to naprawić w następujący sposób:

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

Zauważ, że prawdopodobnie powiedziałem. Obowiązują tutaj te same zalecenia: najpierw upewnij się, że masz aktualną kopię zapasową i przetestuj ją na kilku plikach. jestem nie odpowiedzialny, jeśli nieodwracalnie zniszczy twoją bazę kodu.

Gordon Davisson
źródło