
Я использую 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
Скобки рассматриваются как часть синтаксиса регулярного выражения (они указывают, что их содержимое должно рассматриваться как группа), а не как буквальные символы для сопоставления. Чтобы сообщить парсеру регулярных выражений, что нужно рассматривать их как буквальные символы, вы можете экранировать их с помощью обратных косых черт:
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;' {} \;
Обратите внимание, что я сказал «вероятно». Те же рекомендации применимы и здесь: убедитесь, что у вас есть актуальная резервная копия, и сначала проверьте ее на нескольких файлах. Янетответственность, если это необратимо уничтожит вашу кодовую базу.