2009-02-20 117 views
0

我試圖將某個.txt文件中的某些行移動到另一個.txt文件中。這些線都遵循一定的模式。我一直在尋找在批處理文件中使用find命令,但這並不會從原始文件中刪除該行。將行從一個.txt文件移動到另一個

例如:

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

有什麼辦法來實現這一目標?

在此先感謝。

回答

6

使用findstr你可以打印匹配行了。所以,你可以在幾個步驟做到這一點,psudocoded這樣的:

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

這應該離開你匹配輸出模式的所有線路,並沒有輸入那些線。

編輯:作出最後一步使用移動一個選項來覆蓋,所以沒有必要刪除輸入之前。我想我(主要是一個Linux的人)認爲「重命名」和「移動」是一回事,並且認爲這是被認爲是理所當然的。所以,謝謝你的提醒。

+0

對不起作爲一個完全的學究,但theres其中刪除 「輸入」 文件(1 BTW)2和3之間的臺階 – 2009-02-20 13:10:53

+0

@Binary Worrier:實際上,在unix系統上,使用「mv」進行重命名,如果您在另一個現有文件的頂部「mv」現有文件,目標會自動替換,不需要刪除。 – 2009-02-20 13:16:46

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 
4

如果您可以使用外部程序,一種方法是使用awksed

在awk例如:

awk /pattern/ { print } 

桑達例如:

sed '/inverse_pattern/ d' //Deletes lines which do not match 
相關問題