Как изменить одну строку в файле с помощью NAnt? - PullRequest
6 голосов
/ 26 июля 2011

Мне нужно использовать NAnt для обновления одной конкретной строки в файле .js.Строка будет выглядеть примерно так:

global.ServerPath = 'http://server-path/';

Мне нужен способ обновить часть "пути к серверу" этой строки с помощью целевого сервера.
ReplaceString не годится, так как я выигралне знаю, какой путь в файле, когда я обновляю его.

Любая помощь?

Заранее спасибо

Ответы [ 3 ]

12 голосов
/ 29 июля 2011

Если string::replace не работает <regex> может сделать эту работу. Вот оно:

<?xml version="1.0" encoding="utf-8" ?>
<project name="replace.line" default="replace">
  <target name="replace" descripton="replaces a line">
    <property
      name="js.file"
      value="C:\foo.js" />
    <loadfile file="${js.file}" property="js.file.content" />
    <regex
      input="${js.file.content}"
      pattern="(?'BEFORE'.*)global\.ServerPath\s*=\s*'[^']*';(?'AFTER'.*)" />
    <echo
      file="${js.file}"
      message="${BEFORE}global.ServerPath = 'http://bla/';${AFTER}"
      append="false" />
  </target>
</project>
4 голосов
/ 13 ноября 2013

не должно ли быть [\ w \ s \ W] * вместо. * В ПОСЛЕ и ДО, чтобы иметь возможность захватить все строки?

в моем случае. * Захватывал только строку,тогда как [\ w \ s \ W] * работал для всего файла

1 голос
/ 15 августа 2011

также может использовать задачу копирования вместе с цепочкой фильтров и фильтр заменяющих элементов .

Вот пример:

            <token key="WebConfig.EnvironmentName" value="${env_webconfig_EnvironmentName}" />
            <token key="WebConfig.SMTPServerName" value="${env_webconfig_SMTPServerName}" />
            <token key="WebConfig.DatabaseConnectionString" value="${env_drmportal_webconfig_DatabaseConnectionString}" />

        </replacetokens>
    </filterchain>
</copy>

Я сохраняю все мои файлы шаблонов в папке / config / (например, web.config.template), и мое использование задачи копирования заменяет значения при копировании в ту же папку / config /, но без файла ".template" расширение. Затем я делаю то, что нужно потом ... \

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

...