2012-06-15 102 views
12

我想刪除包含特定關鍵字的文本文件中的所有行。從文件中刪除包含關鍵字的行

到目前爲止,我只找到:

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

,但我不知道如何刪除這些行。

回答

25

你會使用過濾器在filterchain,在支持filterchain元素的任務,即內置的毗連,複製,LoadFile,LoadProperties,移動任務。

例如,使用包含linecontains過濾器的過濾鏈複製或移動文件。

使用linecontains過濾器上的negate參數排除包含該字符串的行。

例子:

<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> 
+0

謝謝,還有一個問題:我怎麼能把這個應用到整個目錄並檢查某些文件類型?例如,我想要做到這一點所有的txt文件,但不是當然jpg文件。 – clamp

+0

使用副本中的[fileset](http://ant.apache.org/manual/Types/fileset.html)指定要包含的文件。 – sudocode

0

您可以執行外部命令。

我沒有測試過,但是在UNIX上您可能會遇到這樣的事情:

<exec executable="sed"> 
    <arg value="s/assert//" /> 
    <arg value="YOUR_FILE" /> 
</exec> 
+0

謝謝,但我在窗口:( – clamp

+0

您可以使用窗口上的sed http://www.cygwin.com/ – mihaisimi

+0

不's/assert //'只刪除斷言,而不是其整個行? – GKFX

相關問題