通过batch file删除txt文件中的某些行

我有一个生成的txt文件。 这个文件有一些多余的行,需要删除。 每行需要删除的行中有两个string中的一个; “错误”或“参考”。 这些令牌可能出现在该行的任何地方。 我想删除这些行,同时保留所有其他行。

所以,如果txt文件看起来像这样:

良好的数据线
坏道C:\ Directory \ ERROR \ myFile.dll
另一个好的数据线
坏的线:参考 
好的路线

我想这个文件最终是这样的:

良好的数据线
另一个好的数据线
好的路线

TIA。

使用以下内容:

type file.txt | findstr /v ERROR | findstr /v REFERENCE 

这具有在Windows操作系统中使用标准工具的优点,而不必find并安装sed / awk / perl等。

请参阅下面的成绩单在运作:

 C:\>inputfile.txt
良好的数据线
坏道C:\ Directory \ ERROR \ myFile.dll
另一个好的数据线
坏的线:参考
好的路线

 C:\>inputfile.txt |  findstr / v ERROR |  findstr / v REFERENCE
良好的数据线
另一个好的数据线
好的路线

您可以使用findstr本身来完成与@ paxdiablo相同的解决scheme。 没有必要一起input多个命令:

 findstr /V "ERROR REFERENCE" infile.txt > outfile.txt 

这是如何工作的细节:

  • / v查找与searchstring不匹配的行(@paxdiablo使用相同的开关)
  • 如果searchstring在引号中,则执行ORsearch,使用每个字(分隔符是空格)
  • findstr可以接受一个input文件,你不需要使用“type”命令来input文本
  • “> outfile.txt”将结果发送到文件outfile.txt,而不是将它们打印到您的控制台。 (请注意,如果文件存在,将会覆盖该文件。如果要附加,请使用“>> outfile.txt”)。
  • 您也可以考虑添加/ i开关来执行不区分大小写的匹配。

如果你有sed:

sed -e'/ REFERENCE / d'-e'/ ERROR / d'[FILENAME]

其中FILENAME是带有好坏行的文本文件的名称

如果你已经安装了perl,那么perl -i -n -e"print unless m{(ERROR|REFERENCE)}"应该可以做到这一点。