将行从一个.txt文件移动到另一个.txt文件

时间:2009-02-20 13:03:29

标签: string scripting cmd batch-file

我正在尝试将某些行从一个.txt文件移动到另一个.txt文件。这些行都遵循某种模式。我一直在寻找在批处理文件中使用find命令,但这不会删除原始文件中的行。

例如:

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

有没有办法实现这个目标?

提前致谢。

3 个答案:

答案 0 :(得分:6)

使用findstr,您也可以打印匹配的行。所以你可以分几个步骤来做,像这样的psudocoded:

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

这会让你在输出中找到与模式匹配的所有行,以及没有这些行的输入。

编辑:最后一步使用带有覆盖选项的移动,因此之前不需要删除输入。我想我(主要是Linux人员)认为“重命名”和“移动”是同一件事,并认为这种覆盖是理所当然的。所以,感谢单挑。

答案 1 :(得分:4)

如果您可以使用外部程序,则可以使用awksed

Awk示例:

awk /pattern/ { print } 

Sed示例:

sed '/inverse_pattern/ d' //Deletes lines which do not match

答案 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