2

我在过滤器链中使用过滤器,在支持过滤器链元素的任务中,即内置的 Concat、Copy、LoadFile、LoadProperties、Move 任务。

因此,例如,使用包含 linecontains 过滤器的过滤器链复制或移动文件。

在您的 linecontains 过滤器上使用 negate 参数来排除包含该字符串的行。

示例:考虑以下代码

<project default="test">
    <target name="test">
        <copy tofile="file.txt.edit" file="file.txt">
            <filterchain>
                <linecontains negate="true">
                    <contains value="[echo]"/>
                </linecontains>
            </filterchain>
        </copy>
    </target>
</project>

outputs:

$ cat file.txt
[echo] Your project1 location is: D:/Project/Project1
[echo] Your project2 location is: D:/Project/Project2
[script] my script running
[echo] Your project3 location is: D:/Project/Project3
[echo] Your project4 location is: D:/Project/Project4

$ cat file.txt.edit
[script] my script running

Expected:
$ cat file.txt.edit
Your project1 location is: D:/Project/Project1
Your project2 location is: D:/Project/Project2
[script] my script running
Your project3 location is: D:/Project/Project3
Your project4 location is: D:/Project/Project4

在这里,如果我使用过滤器链,那么完整的行将被删除。我只想要像 [echo]、[script]...等这样的词。应该被删除。

4

1 回答 1

2

将您的linecontains元素替换为replaceregex

<tokenfilter>
    <replaceregex pattern="\[echo\]" replace="" />
</tokenfilter>

对于多个令牌替换,修改pattern="\[(echo|script)\]"

于 2013-04-19T14:56:53.473 回答