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

chr*_*ome 70 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.

pax*_*blo 100

使用以下内容:

type file.txt | findstr /v ERROR | findstr /v REFERENCE
Run Code Online (Sandbox Code Playgroud)

这样做的好处是可以在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

  • 要完成:您需要添加"> output.txt"(不带引号)以将输出写入文件中. (18认同)
  • 有这个确切的问题,发现它在这里.上帝保佑Stack Overflow !! (4认同)
  • 谢谢,这帮助了我,但提醒我,我有一些问题,包括空格,并且必须使用/ c:所以命令看起来像这样:输入file.txt | findstr/v/c:"错误"| findstr/v/c:"REFERENCE".此外,如果您需要删除已知位于文件顶部的线条,请通过更多+ <n>管道,其中<n>是要剥离的线条数. (2认同)
  • 如果我写 `type test.java | 为什么它会删除我的文件 test.java 中的所有内容?findstr /v“ECHO 已打开。” &gt; test.java` 但如果我将其写入像 `type test.java | 这样的新文件,它会执行预期的操作 findstr /v“ECHO 已打开。” &gt; test2.java` (2认同)

Ric*_*ick 41

您只需使用findstr就能完成与@ paxdiablo相同的解决方案.无需将多个命令组合在一起:

findstr /V "ERROR REFERENCE" infile.txt > outfile.txt
Run Code Online (Sandbox Code Playgroud)

这是如何工作的细节:

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


Rob*_*Rob 6

如果你有sed:

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

其中FILENAME是包含好行和坏行的文本文件的名称

  • 你不需要“-i”标志吗? (2认同)