我使用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;在同一组文件上。
感谢。
答案 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>