我正在尝试将某些行从一个.txt文件移动到另一个.txt文件。这些行都遵循某种模式。我一直在寻找在批处理文件中使用find命令,但这不会删除原始文件中的行。
例如:
find \i pattern "d:\example1.txt" >> "d:\example2.txt"
有没有办法实现这个目标?
提前致谢。
答案 0 :(得分:6)
使用findstr
,您也可以打印不匹配的行。所以你可以分几个步骤来做,像这样的psudocoded:
findstr pattern input > output
findstr /v pattern input > input-inverse
move /y input-inverse input
这会让你在输出中找到与模式匹配的所有行,以及没有这些行的输入。
编辑:最后一步使用带有覆盖选项的移动,因此之前不需要删除输入。我想我(主要是Linux人员)认为“重命名”和“移动”是同一件事,并认为这种覆盖是理所当然的。所以,感谢单挑。
答案 1 :(得分:4)
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