У меня есть следующие операторы в задаче файла gradle, но при ее выполнении появляется ошибка «Персонаж, который нужно экранировать, отсутствует».
String contents = new File( 'settings/tomcat-config/catalina.bat' ).getText()
contents = contents.replaceAll('-Dappspace.home=[^\"]*','test');
Кажется тривиальным, но не удалось разобраться в проблеме.
Не сработало. Та же ошибка.
Вы хотите записать его обратно в файл? Или вы используете контент где-то еще? И вам не нужно убегать от ", здесь попробуйте contents.replaceAll(/-Dappspace.home=[^"]*/,'test')




Предположим, ваш файл catalina.bat содержит строку следующего содержания:
set APP_HOME=-Dappspace.home = "%CATALINA_BASE%\somedir"
тогда вы захотите включить в матч ". Другими словами, бег:
def contents = new File('catalina.bat').text
println contents.replaceAll('-Dappspace.home = "([^"]+)"','test')
напечатает:
set APP_HOME=test
во время бега:
def contents = new File('catalina.bat').text
println contents.replaceAll(/(-Dappspace.home = ")([^"]+)/, '$1test')
напечатает:
set APP_HOME=-Dappspace.home = "test"
что, как я подозреваю, ближе к тому, что вы хотите. Если вы хотите заменить содержимое файла, вы можете просто сделать:
def file = new File(...)
file.text = file.text.replaceAll(...)
также, поскольку это находится в файле gradle, вы можете использовать метод gradle dsl project.file и заменить new File(...) только на file(...) в своем коде, который дает нам окончательную версию (при условии, что вы смотрите на замену строки в содержимом файла):
def f = file('catalina.bat')
f.text = f.text.replaceAll(/(-Dappspace.home = ")([^"]+)/, '$1test')
Я думаю, вам нужно избежать обратной косой черты
-Dappspace.home=[^\\"]*