14

我想从包含某个关键字的文本文件中删除所有行。

到目前为止,我只发现:

<linecontains>
    <contains value="assert"/>
</linecontains>

但我不知道如何删除这些行。

4

2 回答 2

29

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

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

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

例子:

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

前:

$ cat file.txt
abc
assert
def
assert
ghi assert
jkl

后:

$ cat file.txt.edit
abc
def
jkl

要回答有关应用于目录中选定文件的后续问题:

<copy todir="dest">
    <fileset dir="src">
        <include name="**/*.txt"/>
    </fileset>
    <filterchain>
        <linecontains negate="true">
            <contains value="assert"/>
        </linecontains>
    </filterchain>
</copy>
于 2012-06-15T11:35:14.213 回答
0

您可以执行外部命令。

我还没有测试过,但是在 UNIX 上你可能会运行这样的东西:

<exec executable="sed">
    <arg value="s/assert//" />
   <arg value="YOUR_FILE" />
</exec>
于 2012-06-15T11:34:24.920 回答