通过批处理文件删除文本文件中的某些行

时间:2009-01-07 01:59:42

标签: string batch-file

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

因此,如果txt文件如下所示:

Good Line of data
bad line of C:\Directory\ERROR\myFile.dll
Another good line of data
bad line: REFERENCE 
Good line

我希望文件最终像这样:

Good Line of data
Another good line of data
Good line

TIA。

4 个答案:

答案 0 :(得分:98)

使用以下内容:

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

这样做的好处是可以在Windows操作系统中使用标准工具,而不必查找和安装sed / awk / perl等。

在操作中查看以下成绩单:

C:\>type file.txt
Good Line of data
bad line of C:\Directory\ERROR\myFile.dll
Another good line of data
bad line: REFERENCE
Good line

C:\>type file.txt | findstr /v ERROR | findstr /v REFERENCE
Good Line of data
Another good line of data
Good line

答案 1 :(得分:39)

你可以使用findtr本身完成与@ paxdiablo相同的解决方案。无需将多个命令组合在一起:

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

这是如何工作的详细信息:

  • / v查找与搜索字符串不匹配的行(相同的开关@paxdiablo使用)
  • 如果搜索字符串在引号中,则使用每个单词执行OR搜索(分隔符是空格)
  • findstr可以获取输入文件,您无需使用“type”命令将其提供给文本
  • “> outfile.txt”会将结果发送到文件outfile.txt,而不是将它们打印到您的控制台。 (请注意,如果文件存在,它将覆盖该文件。如果要追加,请使用“>> outfile.txt”。)
  • 您可能还会考虑添加/ i开关以执行不区分大小写的匹配。

答案 2 :(得分:5)

如果你有sed:

  

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

其中FILENAME是带有&的文本文件的名称。坏线

答案 3 :(得分:1)

如果你安装了perl,那么perl -i -n -e"print unless m{(ERROR|REFERENCE)}"就可以了。