0

特定の行をある.txtファイルから別のファイルに移動しようとしています。これらの線はすべて特定のパターンに従います。バッチファイルでfindコマンドを使用することを検討してきましたが、これによって元のファイルから行が削除されることはありません。

例えば:

find \i pattern "d:\example1.txt" >> "d:\example2.txt"

これを達成する方法はありますか?

前もって感謝します。

4

3 に答える 3

6

を使用すると、一致しないfindstr行も印刷できます。したがって、次のように擬似コード化すると、いくつかの手順で実行できます。

  • findstr pattern input > output
  • findstr /v pattern input > input-inverse
  • move /y input-inverse input

これにより、パターンに一致するすべての行が出力に残り、入力にはそれらの行が含まれないはずです。

編集: 最後のステップで移動を使用して上書きするオプションを使用したため、前に入力を削除する必要はありません。私(主にLinuxの人)は、「名前の変更」と「移動」を同じものと考えており、その上書きを当然のことと思っていたと思います。それでは、ヘッドアップに感謝します。

于 2009-02-20T13:07:55.060 に答える
4

外部プログラムを使用できる場合、1 つの方法はawkまたはsedを使用することです。

例:

awk /pattern/ { print } 

セッドの例:

sed '/inverse_pattern/ d' //Deletes lines which do not match
于 2009-02-20T13:08:03.923 に答える
2

2つのファイルを作成してから、元のファイルを置き換えるのはどうですか?

find \i pattern "d:\example1.txt" >> "d:\example2.txt"
find \i antipattern "d:\example1.txt" >> "d:\example3.txt"
del example1.txt
ren example3.txt example1.txt

ファイルから行を削除するのは難しいです。通常、本物のプログラミング環境でも、ここで追加のファイルを使用します。

少し異なる実装を次に示します。

ren example1.txt source.txt
find \i pattern "d:\source.txt" >> "d:\example2.txt"
find \i antipattern "d:\source.txt" >> "d:\example1.txt"
del source.txt
于 2009-02-20T13:07:44.780 に答える