如何使用 NAnt 更改文件中的一行?

发布于 2024-11-26 05:43:22 字数 233 浏览 0 评论 0原文

我需要使用 NAnt 更新 .js 文件中的某一特定行。 该行将类似于:

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

我需要一种方法将该行的“服务器路径”部分更新为目标服务器的“服务器路径”部分。
ReplaceString 不好,因为当我更新它时我不知道文件中的路径是什么。

有什么帮助吗?

提前致谢

I need to use NAnt to update one specific line in a .js file.
The line will be something like:

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

I need a way to update the "server-path" part of that line with that of the destination server.
ReplaceString is no good, since I won't know what the path in the file is when I update it.

Any help?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

〆一缕阳光ご 2024-12-03 05:43:22

如果 string::replace 不起作用, 可以完成这项工作。就是这样:

<?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>

If string::replace doesn't work <regex> can do the job. This is it:

<?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>
守不住的情 2024-12-03 05:43:22

在 AFTER 和 BEFORE 中不应该是 [\w\s\W]* 而不是 .* 才能捕获所有行吗?

在我的例子中 .* 仅捕获行,而 [\w\s\W]* 适用于整个文件

shouldn't it be [\w\s\W]* instead of .* in AFTER and BEFORE to be able to capture all the lines?

in my case .* was capturing only line, whereas [\w\s\W]* worked for entire file

森林散布 2024-12-03 05:43:22

还可以使用复制任务以及过滤器链和替换令牌过滤器

这是一个例子:

            <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”文件扩展名时,我使用复制任务替换了值。然后我做之后需要做的事情...\

我承认,以您必须这样做的方式使用属性有点有点麻烦,但是您可以灵活地加载不同的集合按环境(例如本地、暂存、生产等)划分的属性值,但这比我认为您要问的要多一点。

can also use the copy task along with filterchain and replacetokens filter.

Here's an example:

            <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>

I retain all my template files in a /config/ folder (e.g. web.config.template) and my use of the copy task replaces the values when copying to the same /config/ folder but without the ".template" file extension. I then do what's needed afterwards...\

I will admit that it is a bit cumbersome using properties in the way that you have to for this, but you have flexibility in that you can load different sets of property values by environment (e.g. local, staging, production, etc.) but that's a little more than I think you're asking.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文