Ant ReplaceRegExp任务 - 每个文件多次替换?

时间:2016-08-01 16:52:52

标签: regex ant

我使用Ant ReplaceRegExp任务替换超过10,000个文件中的文本。每个文件都有我需要执行的多个搜索/替换模式。截至目前,有多个块,每个块的文件集为" ** / * .java"。

随着我的搜索/替换列表的增长,这需要永远运行,因为它将在10k文件上执行ReplaceRegExp#1,然后在10k文件上执行ReplaceRegExp2,依此类推。我已经有大约15个ReplaceRegExp块,所以我的任务已经花了大约45分钟。

有没有办法获得它,所以每个文件只被处理/访问一次,并且它执行我的所有15个正则表达式搜索/替换文件而不是文件必须处理15个以上?

从本质上讲,寻找逻辑上像这样的东西:

    <replaceregexp  
        match="firstmatch"  
        replace="firstraplce"

        match="secondmatch"
        replace="secondreplace"

        etc..

        byline="true">
        <fileset dir=".">
            <include name="**/*.java"/>
        </fileset>
    </replaceregexp>

这显然是无效的XML,但概念上显示了我正在寻找的东西。现在我使用2组 - 一组用于&#34;第一组/第一组&#34;和#34; secondmatch / secondreplace&#34;在同一组文件上。

感谢。

2 个答案:

答案 0 :(得分:0)

你可以使用TokenFilter中的FilterChain and FilterReader,它允许定义一个标记器(在你的情况下是一个行标记器)和一组将按顺序应用的过滤器。不知道它是否比调用n次ReplaceRegExp任务有更好的性能,但你应该尝试:

<filterchain>
    <tokenfilter>
        <replaceregex pattern="match_1" replace="replace_1"/>
        <replaceregex pattern="match_2" replace="replace_2"/>
        ...
        <replaceregex pattern="match_n" replace="replace_n"/>
    </tokenfilter>
</filterchain>

答案 1 :(得分:0)

以下作品:

 <filterchain>
    <tokenfilter>
        <replacestring from="oldstr1" to="newstr1"/>
        <replacestring from="oldstr2" to="newstr2"/>
    </tokenfilter>
 </filterchain>