gpt4 book ai didi

ant - 用Ant就地过滤文件?

转载 作者:行者123 更新时间:2023-12-03 14:13:52 27 4
gpt4 key购买 nike

我有一个文件目录,我想使用Apache Ant在Linux上进行“就地”字符串过滤(版本1.7.1)。

例如,假设在目录mydir中我有文件foobarbaz。进一步假设正则表达式OLD([0-9])的所有出现都应更改为NEW\1,例如OLD2NEW2。 (请注意,replace Ant任务将不起作用,因为它不支持正则表达式过滤。)

可以使用以下Bash命令创建此测试情况(ant将在当前目录(即mydir的父目录)中运行):

mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done


这是我第一次尝试使用Ant进行过滤:

<?xml version="1.0"?>
<project name="filter" default="filter">
<target name="filter">
<move todir="mydir">
<fileset dir="mydir"/>
<filterchain>
<tokenfilter>
<replaceregex pattern="OLD([0-9])" replace="NEW\1" flags="g"/>
</tokenfilter>
</filterchain>
</move>
</target>
</project>


运行第一个Ant脚本对 mydir中的文件没有影响。 overwrite Ant任务默认情况下 true参数为 move。我什至摆弄 granularity设置,但这没有帮助。

这是我的第二次尝试,该尝试“有效”,但是由于临时文件创建而有些烦人。此版本通过将内容移动到后缀为 filtered的文件中来正确过滤内容,然后使用原始文件名将过滤后的内容“移回”:

<?xml version="1.0"?>
<project name="filter" default="filter">
<target name="filter">
<move todir="mydir">
<globmapper from="*" to="*.filtered"/>
<fileset dir="mydir"/>
<filterchain>
<tokenfilter>
<replaceregex pattern="OLD([0-9])" replace="NEW\1" flags="g"/>
</tokenfilter>
</filterchain>
</move>
<move todir="mydir">
<globmapper from="*.filtered" to="*"/>
<fileset dir="mydir"/>
</move>
</target>
</project>


可以进行第一次尝试(没有临时文件)吗?

最佳答案

请参见replace任务:

<replace 
dir="mydir"
includes="foo, bar, baz">
<replacefilter token="OLD" value="NEW" />
</replace>


replaceregexp任务:

<replaceregexp
file="${src}/build.properties"
match="OldProperty=(.*)"
replace="NewProperty=\1"
byline="true"/>

关于ant - 用Ant就地过滤文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/779064/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com