Ant 替换不以以下字符开头的文件文本

发布于 2024-09-30 15:56:39 字数 220 浏览 3 评论 0原文

我想制作一个 ant 目标,它可以替换不以定义模式开头的文件(或更多)的内容。有没有使用 ant 和 Replaceregexp 的解决方案?或者有替代方案吗? 示例:

  • 我有文件 boo.txt,其中包含以下文本: “这是嘘”。
  • 我还有文件 foo.txt,其中包含以下文本: “只是富”。

我想将 foo.txt 的文本更改为: “这只是 foo”

I want to make an ant target that can replace the content of a file (or more) that does not starts with a defined pattern. Is there a solution for this using ant and replaceregexp ? Or an alternative to this?
Example:

  • I have file boo.txt that has the text:
    "this is boo".
  • Also I have the file foo.txt that has the text:
    "just foo".

I want to change the text for the foo.txt to:
"this just foo"

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

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

发布评论

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

评论(2

涙—继续流 2024-10-07 15:56:39

可能是用捕获编写合适的正则表达式的情况。

这似乎适用于您给出的示例。

<property name="prefix" value="this " />
<replaceregexp flags="s" match="^(${prefix})?(.*)" replace="${prefix}\2">
    <fileset dir="files" />
</replaceregexp>
  • 这些文件是使用文件集指定的 - 这里是 files 目录中的所有文件。
  • 我们想要选择添加的前缀是 this,它存储在属性中,因为我们需要在两个地方提及它。
  • flags="s" 设置确保我们将文件视为单个字符串以进行匹配(而不是匹配每一行)。
  • 正则表达式在文件中查找前缀字符串,并将其存储在 capture \1 中 - 它将被丢弃。
  • 字符串的其余部分位于 capture \2 中。
  • 替换为前缀字符串,后跟 capture \2

您可能会认为它总是添加前缀,但是如果前缀已经存在,则将其删除...除了 replaceregexp 任务将不会写入文件,除非与现有文件不同。

Probably a case of cooking up a suitable regular expression with captures.

This one appears to work for the example you give.

<property name="prefix" value="this " />
<replaceregexp flags="s" match="^(${prefix})?(.*)" replace="${prefix}\2">
    <fileset dir="files" />
</replaceregexp>
  • The files are specified using a fileset - here all files in the files directory.
  • The prefix we want to optionally add is this, which is stored in a property, as we need to mention it in two places.
  • The flags="s" setting ensures that we treat the file as a single string for match purposes (rather than matching each line).
  • The regular expression looks for the prefix string in the file, and stores it in capture \1 - which is discarded.
  • The rest of the string is in capture \2.
  • Replace with the prefix string, followed by capture \2.

You might think of it as always adding the prefix, but after taking the prefix away if it's already there...except that the replaceregexp task will not write the file unless if differs from the existing.

汐鸠 2024-10-07 15:56:39

这只是部分答案..我不确定它是否正确,但至少也许可以给你一些方向

,你需要 ant-contrib

    <property name="folder.name" value="some-folder-name" />
    <property name="text.substitution" value="this " />

    <target name="main">
       <foreach target="target2" param="file_path"> 
          <path> 
             <fileset dir="${folder.name}" casesensitive="no" /> 
          </path> 
       </foreach>
    </target>

<target name="target2">
    <loadfile property="message" srcFile="${file_path}"/>
        <!-- f message doesnt have text.substitution at the begging -->
        <!-- not sure if this is correct regex -->
        <propertyregex property="myprop" input="${message}" 
                      regexp="([^b]+)" select="\0" casesensitive="false" /> 
    <if>
        <equals arg1="${myprop}" arg2="{text.substitution}" />      
    <then>
        <concat destfile="foo.txt" append="true">${text.substitution} </concat>  
    </then>
    </if>
</target>

this is just a partial answer.. I'm not sure if its correct but at least maybe can give you some direction

for this you need ant-contrib

    <property name="folder.name" value="some-folder-name" />
    <property name="text.substitution" value="this " />

    <target name="main">
       <foreach target="target2" param="file_path"> 
          <path> 
             <fileset dir="${folder.name}" casesensitive="no" /> 
          </path> 
       </foreach>
    </target>

<target name="target2">
    <loadfile property="message" srcFile="${file_path}"/>
        <!-- f message doesnt have text.substitution at the begging -->
        <!-- not sure if this is correct regex -->
        <propertyregex property="myprop" input="${message}" 
                      regexp="([^b]+)" select="\0" casesensitive="false" /> 
    <if>
        <equals arg1="${myprop}" arg2="{text.substitution}" />      
    <then>
        <concat destfile="foo.txt" append="true">${text.substitution} </concat>  
    </then>
    </if>
</target>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文