0

目的の結果を得るためにテキスト ファイルを操作する際に問題が発生しています。

たとえばsprocs.txt、svn diff から作成されたというテキスト ファイル内に、次のような行があります。

     M      https://localhost/svn/Repo/branches/projectA/sprocs/admin/foo.sql
     M      https://localhost/svn/Repo/branches/projectA/sprocs/foo2.sql
     M      https://localhost/svn/Repo/branches/projectA/sprocs/admin
     M      https://localhost/svn/Repo/branches/projectA/sprocs

で始まるすべてを保持するようにこのファイルを編集しようとしていますが、で/sprocs終わらない各行を削除し.sqlます。たとえば、上記のファイルは次を返します。

    /sprocs/admin/foo.sql 
    /sprocs/foo2.sql

ところで: これらのコマンドは nant で処理する予定です。アイデアはありますか?前もって感謝します。

4

3 に答える 3

3

これは、純粋な NAnt を使用してジョブを実行します。

<target name="go">
  <property
    name="file.path"
    value="C:\foo\sprocs.txt" />
  <foreach
    item="Line"
    in="${file.path}"
    property="line">
    <property
      name="MATCH"
      value="" />
    <regex
      pattern="(?'MATCH'/sprocs.*\.sql)$"
      input="${line}"
      failonerror="false" />
    <if test="${string::get-length(MATCH) > 0}">
      <echo message="match: ${MATCH}" />
      <!-- do whatever you want to do with your match -->
    </if>
  </foreach>
</target>

パラコのソリューションほどエレガントではありませんが、機能します。

于 2012-12-08T11:42:49.633 に答える
2
 $ cat sprocs.txt | sed -n 's/.*\(\/sprocs\/.*\.sql$\)/\1/p'
/sprocs/admin/foo.sql
/sprocs/foo2.sql
于 2012-12-08T02:47:48.013 に答える
1

/sprocs次の正規表現パターンが機能するはずです。これにより、で始まり、で終わるものをすべて見つけるキャプチャ グループが作成されます。.sql

(/sprocs.*\.sql$)

nant 正規表現のオプションで複数行モードを渡して有効にしてください。そうしないと、正しく一致しません。ここで説明されているように、これはmオプションだと思います

于 2012-12-07T17:40:09.560 に答える