删除Notepad ++中除包含我需要的单词的行以外的所有行?


Answers:


292

有一个简单的方法可以实现此目的。您需要执行3个步骤。

  1. 转到搜索菜单>查找...>选择“标记”标签。激活正则表达式。搜索^<Path>^表示行首)。别忘了检查“书签行”并按“标记所有”

    ==>您要保留的所有行都有一个书签

  2. 转到菜单“搜索-书签-反向书签”

    ==>您要删除的所有行都带有书签。

  3. 转到菜单“搜索-书签-删除书签的行”

    ==>删除所有带书签的行。


47
+1。很好,对此一无所知。还有一些选项“删除未标记的行”或“剪切/复制标记的行”可以节省一些时间。
deizel

6
起初我遇到了麻烦,因为我的Notepad ++版本(6.2.3)没有名为“ Mark Tab”的菜单项。相反,您必须转到“搜索”->“查找...”->单击选项卡“标记”。而且您不再需要反转书签。Notepad ++现在具有“删除未标记的行”。但是您的提示对我有很大帮助!谢谢!
aakoch 2013年

22
您可以跳过步骤2,因为(至少从v6.4.5开始)可以选择“删除未标记的行”。
朱利安(Julian)2013年

4
我使用Notepad ++已有很长时间了,我之前从未知道什么是“书签”。该工具的功能如此强大,而我对此知之甚少。
Danubian Sailor 2014年

你真是个天才 这只是如何了解您实际使用的工具的另一个令人震惊的例子。
Marcello Grechi Lins

67

从6.3开始,实际上可以分两个步骤完成。我认为它可以比我第一次尝试5.9时更早完成。

使用stema的帖子作为此答案的基础。现在少了一步。标记线并删除未标记的线。做完了 详细说明如下。

  1. 搜索菜单“查找”。在“查找”对话框中,单击“标记”选项卡。激活正则表达式。搜索^<Path>^表示行首)。别忘了检查“书签行”并按“标记所有”

    ==>您要保留的所有行现在都有一个书签

  2. 搜索菜单->书签->删除未标记的行。

    ==>所有收藏行都被删除。


3
这花了我10秒钟,而另一种解决方案花了我20秒钟以上。谢谢!
黑色

我不需要^在搜索词中添加,也不需要使用正则表达式。希望这对某人有帮助。
sa_leinad

29

仅清洁正则表达式的解决方案

两步变形

  1. 正则表达式替换

    (?!^.*test.*$)^.+
    

    用您要求的文字替换测试

  2. 更换

    [\r\n]{2,}
    

    \r\n

一步式

使用^(?!<Path>).*\r\n空字符串替换匹配。通用版本为^(?!.*?test).*\r\n这不会删除文件末尾的空行。删除所有其他行,包括多个连续的空行。

说明:

  1. (?!)是否定的查询。^.*test.*$ 选择包含所需文本的整行。

  2. [\r\n]{2,}匹配\r\n出现的次数超过所有的次数,这是Windows的新行。如果您使用的是Linux或其他操作系统,则可能需要弄乱它。第二种是用一根回油管代替它。


1
人民注意:有时带有行尾(EOL)的正则表达式“无效”。\r\n帖子中提到的EOL是Windows所使用的,因此可能不是您想要的。通常在Linux环境中只是\n,在Mac环境中只是\r,因此,如果您从任一环境中拉出文件,都不会是Windows风格的EOL。但是,如果您通过FileZilla中下载和ASCII模式触发,它可能会改变他们重新进入Windows EOL(如\n\r\n)。因此,如果正则表达式不起作用,请通过转到“查看>显示符号>显示行尾”来检查EOL样式。CR = \r。LF = \n
dhaupin '16

5

在我看来,最简单的方法是只使用“在当前文档中查找全部”功能,然后将结果复制到一个新文件中,或者选择全部并替换为当前文件。

这将找到包含您的文本的所有行,并在底部列出它们。只需右键单击搜索结果并复制/粘贴即可。


您必须通过替换删除行号\tLine [\d]*: 。仍然是一个很好的答案。
Noumenon

对于行宽太宽以至于Notepad ++在搜索结果窗口中将其截断的行来说,这将不起作用。
MasterJoe2

4

转到菜单搜索 -> 查找...- >激活正则表达式。搜索“ ^ Path ”(^用于行首)。

单击“在当前文档中查找全部”按钮。

“查找结果”窗口将显示该模式的所有行。选择将它们复制/粘贴到Notepad ++中的新选项卡中。

在这个新标签中,进入:菜单搜索 -> 替换...- >激活正则表达式。

在“查找内容:”字段中,使用以下模式:“第\ d +行:”。将“替换为:”字段保留为空白。

点击“全部替换”按钮。


3

如果您确实要匹配<Path>而不是文件系统路径,则可以使用Perl在命令行中尝试:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

它与Windows上的Strawberry Perl一起使用,因此如果结果不符合您的期望,请进行相应的调整。


3

它很笨拙,但请将其全部复制到Excel,然后使用=IF(LEFT(A1,6)="<Path>",A1,"")并完全复制该公式。然后将其复制回Notepad ++。这不是很理想,但是很容易(如果您有Excel)。警告:它不适用于缩进的行(Excel会移动列等)。


当有多种直接处理此任务的方法时,为什么要破坏性地复制到另一个应用程序中,然后在其中进行处理并转移回去?
Baldrickk

1

使用记事本++没有简单的方法来完成所需的操作。您需要将程序下载到计算机上或在VB中编写脚本(我假设您使用的是Windows)。

您可以使用sed两种方法之一来做您想做的事情。sed实用程序是* nix上的最爱,可以从Windows的GnuWin(http://gnuwin32.sourceforge.net/packages/sed.htm)的伟大人士那里找到。您将下载此程序,然后在命令提示符下运行命令。

删除所有不包含的行:
sed -i '/^<PATH>/!d' file

将包含的所有行打印到新文件中:
sed -n '/^<PATH>/p' file > newfile

我建议您使用打印到新文件的行。原因是您可能不会第一次获得regex语句。sed实用程序使用正则表达式基本语法(请参见http://www.regular-expressions.info/reference.html上的参考资料)。如果是* nix路径(/ var / www),则需要转义/字符才能使正则表达式正常工作。

示例:sed -n '/^\/var\/www/p' file > newfile
这将打印出所有以“ / var / www”开头的行。如果我申请转义/字符,则该命令将引发错误。您可以使用反斜杠字符\来转义特殊字符(例如/)。


这可能是一个旧答案,但是由于它实际上具有2票(我现在为-1),所以我不仅想评论它有多错,还想在SINGLE命令操作中重申我刚刚(再次)花费了> 100k行只需将正则表达式放在查找内容中,即可在3秒内将包含一个单词(或短语)的日志文件降至34行,只需在不到3秒的时间内“出错”即可:^(?!。*?error)。* \ r \ n并将REPLACE WITH保留为空白,并且不要选择“ .matches newline”,然后单击“ REPLACE ALL”。是的,我也喜欢sed和awk,但说NPP无法做到这一点只是错误的。
Collin Chaffin

1

使用正则表达式替换更好的解决方案:

(?!^.*SOMETEXT.*$)^.+\r?\n

一无所有


1
欢迎来到超级用户!要为那些可能不知道正则表达式的每一位功能的人解释这一点?:)
bertieb '18年

0

使用Search-> Replace并输入正则表达式,例如,^[^ ].*然后使用替换为空字符串Regular expression。下一步是找到空行搜索\n\n与替换\n使用Extended多次,直到0 occurrences were found.(使用\r\n\r\n\r\n依赖于文件格式)。如果一行中有很多空行,则在搜索字符串中使用起来更快,\n\n\n\n\n\n\n甚至更多\n:: s。

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.