使用Ant过滤文件?

Gre*_*tes 17 ant

我有一个文件目录,我想使用Apache Ant(Linux上的1.7.1版)进行"就地"字符串过滤.

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

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

mkdir mydir
for FILE in foo bar baz ; do echo "A OLD1 B OLD2 C OLD3" > mydir/${FILE} ; done
Run Code Online (Sandbox Code Playgroud)

这是我第一次尝试使用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>
Run Code Online (Sandbox Code Playgroud)

运行第一个Ant脚本对文件没有影响mydir.默认情况下,该overwrite参数true包含moveAnt任务.我甚至摆弄了这个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>
Run Code Online (Sandbox Code Playgroud)

可以首次尝试(没有临时文件)吗?

Kev*_*vin 15

查看替换任务:

<replace 
   dir="mydir" 
   includes="foo, bar, baz">
   <replacefilter token="OLD" value="NEW" />
</replace>
Run Code Online (Sandbox Code Playgroud)

或者replaceregexp任务:

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

  • 在这种情况下,请参阅可选的replaceregexp任务:http://ant.apache.org/manual/OptionalTask​​s/replaceregexp.html (2认同)