Замена строки в большом количестве исходных файлов Java
У меня есть около 600 классов Java в проекте со случайными именами (в их именах нет шаблонов).
Я хочу заменить определенную строку внутри этих классов другой строкой.
Например, строка внутри этих файлов
System.out.println("Product is: "+myProduct);
и я хочу заменить эту строку
System.out.println("Object is: "+myObject);
Приведенная выше строка является лишь примером, показывающим, чего я хочу достичь.
Я использую RAD 7.5 для разработки.
Есть ли простой способ сделать это во всех 600 файлах одновременно?
2 ответа
Да. Открыв диалоговое окно "Поиск - файл...", введите то, что вы хотите найти, и фильтр файла, который вы хотите, а затем нажмите " Заменить".
Нет доступа к системе UNIX.
Это твоя первая проблема. Установите Cygwin, чтобы иметь твердую оболочку, и тогда вы сможете научиться выполнять пакетные операции с исходным кодом. Быть способным grep
Легкость в использовании может значительно облегчить изучение больших баз кода и сузить объем кода, который может привести к сложной проблеме.
После того, как вы установили это, вы можете решить вашу непосредственную проблему с
perl -i.bak \
-pe 's/System.out.println\("Product is: "+myProduct\);/System.out.println("Object is: "+myObject);/' \
file0.java file1.java ...
Разбивая это:
-i
означает обрабатывать аргументы как файлы для изменения на месте.bak
означает сделать копию входных файлов с.bak
продление до внесения изменений-p
означает завернуть программу в цикл, который захватывает строку, запускает программу и печатает строку-e 's/.../.../'
означает, что указанная часть является программой для запуска и выполняет подстановку регулярного выражения.- остальные файлы для запуска.
С другой стороны,
find . -name \*.java
должен перечислить все исходные файлы Java в текущем каталоге.
Предполагая, что каталог не имеет пробелов в своем пути, вы можете сделать
find . -name \*.java | xargs perl -i.bak -pe 's/.../.../'
где ...
это замена выше, чтобы запустить его через все источники Java в рабочем каталоге.