2009-02-20 93 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 
相关问题