Я использую 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")()

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

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

1 ответ1

1

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

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;' {} \;

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .