Переименование элемента файла в скобках

447
kay

Я использую macOS X, вводя это в терминал, чтобы переименовать некоторые вещи:

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

Который должен переименовать все:

getGreenObject() 

с

newObject("green") 

но то, что он сделал, заменил getGreenObject () на это:

newObject("green")() 

что привело к множеству ошибок. Кажется, команда не распознает "()" скобки открытия и закрытия?

Как я могу исправить все эти ошибки сейчас с помощью той же команды?

0

1 ответ на вопрос

1
Gordon Davisson

Скобки обрабатываются как часть синтаксиса регулярного выражения (они указывают, что их содержимое должно рассматриваться как группа), а не как литеральные символы для сопоставления. Чтобы синтаксический анализатор регулярных выражений рассматривал их как буквенные символы, вы можете экранировать их с помощью обратной косой черты:

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

Теперь: у вас есть резервная копия до того, как это произошло, чтобы вы могли вернуться и попробовать снова? При выполнении любого массового изменения, подобного этому, вы всегда должны быть уверены, что ваша резервная копия обновлена ​​(у вас есть резервная копия, верно?), А также запустить небольшой тест, прежде чем отключать его на базе основного кода.

Если у вас нет резервной копии, к которой можно вернуться, вы можете исправить это следующим образом:

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

Обратите внимание, что я сказал, вероятно. Здесь применимы те же рекомендации: сначала убедитесь, что у вас есть актуальная резервная копия, и сначала протестируйте ее на нескольких файлах. Я не несу ответственности, если это необратимо уничтожит вашу кодовую базу.