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



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

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

有没有一种方法可以让每个文件只处理/访问一次,并且它对文件执行所有15次以上的regex搜索/替换,而不是文件必须单独处理15次以上?

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

    <replaceregexp  
        match="firstmatch"  
        replace="firstraplce"
        match="secondmatch"
        replace="secondreplace"
        etc..
        byline="true">
        <fileset dir=".">
            <include name="**/*.java"/>
        </fileset>
    </replaceregexp>

这显然是无效的XML,但从概念上显示了我要查找的内容。现在,我在同一组文件中使用了两个组,一个用于"firstmatch/firstreplace",另一组用于"secondmatch/scondreplace"。

谢谢。

以下作品:

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

您可以使用FilterChain和FilterReader中的TokenFilter,它允许定义一个标记器(在您的情况下是一个行标记器)和一组将按顺序应用的过滤器。不知道它是否比调用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>

最新更新