1

定義されたパターンで始まらないファイル (またはそれ以上) のコンテンツを置き換えることができる ant ターゲットを作成したいと考えています。ant と replaceregexp を使用してこれに対する解決策はありますか? またはこれに代わるものですか?例:

  • 「これはブーです」というテキストを含むファイル boo.txt があります。
  • また、「just foo」というテキストを含むファイル foo.txt があります。

foo.txt のテキストを「this just foo」に変更したい

4

2 に答える 2

7

おそらく、キャプチャを使用して適切な正規表現を作成する場合です。

これは、あなたが与えた例でうまくいくようです。

<property name="prefix" value="this " />
<replaceregexp flags="s" match="^(${prefix})?(.*)" replace="${prefix}\2">
    <fileset dir="files" />
</replaceregexp>
  • filesファイルはファイルセットを使用して指定されます。ここでは、ディレクトリ内のすべてのファイルです。
  • オプションで追加したいプレフィックスは ですthis。これはプロパティに保存されます。これは 2 つの場所で言及する必要があるためです。
  • このflags="s"設定により、(各行を照合するのではなく) 照合の目的でファイルを単一の文字列として処理することが保証されます。
  • 正規表現はファイル内のプレフィックス文字列を探し、それをキャプチャに保存しますが、\1これは破棄されます。
  • 文字列の残りは capture にあり\2ます。
  • プレフィックス文字列に置き換え、その後に capture を続け\2ます。

常にプレフィックスを追加すると考えるかもしれませんが、プレフィックスが既に存在する場合はプレフィックスを削除した後...ただし、既存のものと異なる場合を除き、replaceregexpタスクはファイルを書き込みません。

于 2010-11-05T22:07:24.637 に答える
0

これは単なる部分的な答えです..正しいかどうかはわかりませんが、少なくとも方向性を示すことができるかもしれません

これにはant-contribが必要です

    <property name="folder.name" value="some-folder-name" />
    <property name="text.substitution" value="this " />

    <target name="main">
       <foreach target="target2" param="file_path"> 
          <path> 
             <fileset dir="${folder.name}" casesensitive="no" /> 
          </path> 
       </foreach>
    </target>

<target name="target2">
    <loadfile property="message" srcFile="${file_path}"/>
        <!-- f message doesnt have text.substitution at the begging -->
        <!-- not sure if this is correct regex -->
        <propertyregex property="myprop" input="${message}" 
                      regexp="([^b]+)" select="\0" casesensitive="false" /> 
    <if>
        <equals arg1="${myprop}" arg2="{text.substitution}" />      
    <then>
        <concat destfile="foo.txt" append="true">${text.substitution} </concat>  
    </then>
    </if>
</target>
于 2010-11-05T21:17:36.793 に答える