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


77

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

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

好的数据线
C:\ Directory \ ERROR \ myFile.dll的错误行
另一条好数据
坏线:参考 
好线

我希望文件最终像这样:

好的数据线
另一条好数据
好线

TIA。

Answers:


107

使用以下内容:

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

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

运作时请参阅以下笔录:

C:\>输入file.txt
好的数据线
C:\ Directory \ ERROR \ myFile.dll的错误行
另一条好数据
坏线:参考
好线

C:\>输入file.txt | findstr / v错误| findstr / v参考
好的数据线
另一条好数据
好线

1
太好了,正好是我要找的那条线。
chrome

5
有了这个确切的问题,就在这里找到了。上帝保佑堆栈溢出!
马特·罗吉什

22
要完成操作:您需要添加“> output.txt”(不带引号)以将输出写入文件中。
Burkhard

谢谢,这就是我喜欢的方式,它既快捷又简单!
Kuberchaun

2
谢谢,这对我有所帮助,但请注意,我在使用空格等短语时遇到了一些问题,必须使用/ c:因此命令如下所示:type file.txt | findstr / v / c:“错误” | findstr / v / c:“参考”。另外,如果您需要剥离位于文件顶部的行,请通过更多+ <n>将其通过管道传输,其中<n>是要剥离的行数。
Apeiron

45

您可以仅使用findstr来完成与@paxdiablo相同的解决方案。无需将多个命令一起传送:

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

运作方式的详细信息:

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

输入!INSTALLED_APPS!| findstr / v“ @ //”> temp_filter_out_junk.txt> nul 2>&1
Mike Q

我试过了,type D:/e5/datastream/package.json | findstr /v eikon-framework | findstr /v df-core但并没有删除线
kittu

我尝试了findstr / V“ eikon-framework df-core” D:\ e5 \ datastream \ package.json> D:\ e5 \ datastream \ package.json,但是如果我尝试替换同一文件中的数据,它将删除所有内容如果我使用不同的输出文件名,那么它将起作用。如何更新相同的文件?
kittu

@kittu使用“ >>”代替“>”。从答案:如果要追加,请使用“ >> outfile.txt”。您不能在单个命令中更改同一文件。
里克

6

如果您已完成:

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

FILENAME带有好与坏行的文本文件的名称在哪里


1
您不需要-i旗帜吗?
prosoitos

1

如果您已经安装了perl,则perl -i -n -e"print unless m{(ERROR|REFERENCE)}"应该解决这个问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.