我有一个文本文件,想保留以<Path>开头的行,并删除所有其他行。

我该怎么做?

评论

相关:stackoverflow.com/questions/8264391/…

LineFilter2插件也易于使用。

#1 楼

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



转到“搜索”菜单>“查找...”>选择“标记”标签。激活正则表达式。搜索^<Path>^用于行开始)。不要忘记检查“书签行”并按“标记所有”

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


转到菜单“搜索-书签-删除未标记的行”

==>删除所有未标记的行。



评论


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

– deizel
2011年10月10日,11:31

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

– aakoch
2013年2月7日14:14



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

–朱利安
2013年9月27日上午11:00

我使用Notepad ++已有很长时间了,以前我从来都不知道什么是“书签”。该工具多么强大,我对此知之甚少。

–努比亚水手
2014年11月19日10:44

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

– Marcello Grechi Lins
16年6月23日在14:54

#2 楼

从6.3开始,实际上可以分两个步骤完成。我认为它可以比我第一次尝试时的5.9来早。
使用stema的帖子作为此答案的基础。现在少了一步。标记线并删除未标记的线。做完了详细说明如下。


搜索菜单“查找”。在“查找”对话框中,单击“标记”选项卡。激活正则表达式。搜索^<Path>^用于行开始)。不要忘记检查“书签行”并按“标记所有”
==>现在要保留的所有行都有一个书签


搜索菜单->书签->删除未标记的行。
==>所有未标记的行都将被删除。



评论


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

–黑色
16年7月26日在11:25

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

–sa_leinad
19年5月20日在5:23

#3 楼

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

两步变式



正则表达式替换

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


用您要求的文本替换测试


替换

[\r\n]{2,}


\r\n


单步变量

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

说明:


(?!)是负向查找。 ^.*test.*$选择包含所请求文本的整行。
[\r\n]{2,}匹配出现的次数更多的\r\n,然后将其替换为Windows New行。如果您使用的是Linux或其他操作系统,则可能需要弄乱它。第二种是用一根返回管代替它。


评论


人民注意:有时带有行尾(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 Dec 13'15:02



#4 楼

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

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

评论


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

–本体
17年1月10日在21:21

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

– MasterJoe
19年8月24日,0:37

#5 楼

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

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

将出现“查找结果”窗口与所有线条的模式。选择将它们复制/粘贴到Notepad ++中的新选项卡中。

在此新选项卡中,转到:菜单搜索->替换...->激活正则表达式。

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

单击“全部替换”按钮。

#6 楼

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

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


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

#7 楼

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

评论


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

–巴尔德里克
17年2月15日在16:36

#8 楼

使用记事本++没有简单的方法来完成所需的操作。您需要将程序下载到计算机上或在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行中,只需简单地“错误”即可:^(?!。*?error)。* \ r \ n并将REPLACE WITH保留为空白,并且不要选择“ .matches newline”,然后单击“ REPLACE ALL”。是的,我也喜欢sed和awk,但是说NPP无法做到这一点只是错误的。

–科林·查芬
18/12/30在18:53

#9 楼

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

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


不进行替换

评论


欢迎来到超级用户!请为可能不知道正则表达式的每一部分功能的人解释这一点? :)

–bertieb
18年5月1日在15:47

#10 楼

使用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:s会更快。