2012-06-15 9 views

risposta

25

Si potrebbe utilizzare tale filtro in un filterchain, in un compito che sostiene l'elemento filterChain, vale a dire l'in-built Concat , Copia, Carica file, Carica proprietà, Sposta attività.

Quindi, ad esempio, copiare o spostare il file utilizzando una filterchain contenente il filtro linecontains.

Utilizzare il parametro negate sul filtro linecontains per escludere le righe contenenti quella stringa.

Esempio:

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

Prima:

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

Dopo:

$ cat file.txt.edit 
abc 
def 
jkl 

Per rispondere alla tua domanda followup su come applicare al file selezionati in una directory:

<copy todir="dest"> 
    <fileset dir="src"> 
     <include name="**/*.txt"/> 
    </fileset> 
    <filterchain> 
     <linecontains negate="true"> 
      <contains value="assert"/> 
     </linecontains> 
    </filterchain> 
</copy> 
+0

grazie, un'altra domanda: come posso applicare questo a un'intera directory e verificare determinati tipi di file? per esempio voglio farlo a tutti i file txt ma non ai file jpg, naturalmente. – clamp

+0

Utilizzare un [set di file] (http://ant.apache.org/manual/Types/fileset.html) nella copia per specificare i file che si desidera includere. – sudocode

0

È possibile eseguire un comando esterno.

non ho ancora testato, ma su UNIX si potrebbe eseguire qualcosa di simile:

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

grazie, ma io sono su windows :( – clamp

+0

Puoi usare sed su windows http://www.cygwin.com/ – mihaisimi

+0

Non 's/assert //' rimuove solo la parola assert, non la sua intera riga? – GKFX

Problemi correlati