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

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

awk 示例:

awk /pattern/ { print } 

赛德示例:

sed '/inverse_pattern/ d' //Deletes lines which do not match
于 2009-02-20T13:08:03.923 回答
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 回答