Переименование элемента файла с помощью скобок

Переименование элемента файла с помощью скобок

Я использую 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;' {} \;

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

Связанный контент