是否可以删除记事本+中的重复行,只留下一行?
记事本++可以做到这一点,只要您想按行排序,并同时删除重复的行。
您将需要textfx插件。这以前包含在旧版本的记事本+中,但是如果您有更新的版本,您可以从菜单中添加它,方法是转到Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install。在某些情况下,它也可以称为TextFX Characters,但这是相同的。
所需的复选框和按钮现在将显示在:TextFX -> TextFX Tools下的菜单中。
确保选中"Sort outputs only unique…"。接下来,选择一个文本块(ctrl+a选择整个文档)。最后,单击"排序行区分大小写"或"排序行不区分大小写"
- 难以置信的强大的插件,尽管它的"年龄"。希望他们永远不会从标准NPP插件中删除这个插件。那个考虑过这个插件中所有特性的人,有点"远见卓识"。
- 注意,如果文件是只读的,这个方法不会给出任何类型的警告。不管怎样,我的文件被分类了,所以这个工具似乎已经工作了,直到我发现了一个副本。直到我尝试了@stema的搜索和替换方法,这确实让我很沮丧。
- 比Excel更强大。
- textpad只使用一个键-f9,希望np++也允许热键进行此操作。
- @那是挖苦,挖苦还是什么?我的安装中没有textfx插件
- 不,我不想整理任何东西
- 记事本+x64版本怎么样?插件textfx x64版本不存在
- 我无法检查Sort outputs only选项。怎么办?
- textfx不在64位版本中。
- @地理位置和将不会有64位的textfx插件见本注释。因此,最好知道是否有其他插件提供排序和重复删除。
- 我的记事本中没有插件选项卡++
由于记事本++版本6,您可以在"搜索和替换"对话框中使用此regex:
换成什么都没有。这将使所有重复行中的最后一个出现在文件中。
不需要排序,重复的行可以在文件中的任何位置!
您需要检查选项"正则表达式"和。匹配换行符":
^与行首匹配。
(.*?)匹配任何字符0次或更多次,但尽可能少(它与第行完全匹配,因为需要这样做)。匹配newline"选项)。由于使用\1可以访问周围的括号,因此存储匹配的行。
$与行尾匹配。
\s+?^此部分匹配所有空白字符(换行!)直到下一行的开始=>这将删除匹配行后的新行,以便替换后没有空行。
这是一个积极的前瞻性断言。这是这个regex中的重要部分,只有当文件中其他地方的行完全相同时,才会匹配(并删除)一行。
- 这一个确实比另一个正则表达式好。不需要多次通过以消除所有重复。
- 哦,这一个太棒了,它甚至删除了空的行,我正在宏化它。)
- 很好学。解释也很精确!多亏了提倡者和回复者!
- 在某些情况下,它只删除文件中的所有行。
- 是否有任何方法可以删除最后一个事件?这只和最后一只一样…
- 在我的例子中,这个解决方案删除了所有行,取消选中. matches newline就成功了。
- 很完美!我在一个没有互联网接入的锁定系统上使用记事本。没有办法下载插件,所以这对我来说更好。
- 这对我不起作用…
- @在某些情况下,SERG也不适用于我,但当我删除"匹配换行"时,它确实适用于:)
- 在我的例子中,所有的行都被删除了,就像SERG一样。但是,当我不检查"匹配新线"时,它工作得很好,就像戴维登科一样。
- 如果稍微调整捕获组,可以修复删除文件的副作用:^([^
]*)$s+?^?=*^ 1美元)
- 只找到1行
- 对于我来说,只有使用本机排序功能(菜单编辑→行操作→按字典顺序升序/降序排序行)对行进行排序后,它才能正常工作。
- 也许可以添加一些关于实际性能的声明?听起来它必须至少具有二次性能(内存和执行)。实际执行超过1秒的行数是多少?
- 不起作用,它只删除一行。
如果行紧跟在另一行之后,则可以使用regex replace
搜索模式:^(.*
?
)(\1)+。
替换为:\1。
- 也许其他人对此很幸运,但对我而言^(.*)1会导致"找不到文本"
- @b1naryatr0phy确保将"搜索模式"设置为"正则表达式",我还更新了模式,以便它可以处理Windows样式的行结尾。
- 记事本++有一个轻的regex引擎,它不允许高级功能,甚至不允许?或
"因为它只在一行上工作,您使用$作为
字符
- 是的,不工作
- 这样一个接一个地消除了。你必须重复多次。我想知道为什么+->不起作用(认为它报告了许多替代品)
- @val,如果将匹配的后引用部分设置为需要1个或多个匹配的组,则模式将一次匹配n个连续的重复行:^(.*
?
)(\1)+。
- 工作得很好!谢谢!
记事本+
->替换窗口
确保在搜索模式下
您已选择"正则表达式"单选按钮
找到什么:
^(.*)(
?
\1)+$
替换为:
$1
之前:
and we think there
and we think there
single line
Is it possible to
Is it possible to
后:
and we think there
single line
Is it possible to
- 不完全有效。它标记了我的整个文件
- 是否需要对文件进行排序才能使其正常工作?
如果您不关心行顺序(我认为您不关心),那么您可以使用Linux/FreeBSD/Mac OS X/Cygwin框并执行以下操作:
1
| $ cat yourfile | sort | uniq > yourfile_nodups |
然后在记事本+中再次打开文件。
- 在Windows 7上不工作。'cat' is not recognized as an internal or external command, operable program or batch file.
- @iain-elder:cat是一个标准的Unix实用程序,这就是为什么这个答案指定它在Linux、FreeBSD和MacOSX上工作。答案也表明了cygwyn:这是一个Windows程序,它提供了一个Unix风格的shell,并与之一起提供了cat。长话短说(太迟了!):Win 7需要Cygwin来完成此操作。
- 在Windows中有PowerShell:cat yourfile | sort -Unique
- 这些都是"无端使用猫"的好例子。忘记cat实用程序,只需使用文件重定向:sortyourfile_nodups
- @Scott8035,我同意cat不能用于运行该命令,但是我发现,当计算出一长串不明显的命令(如cat file_sed)时,从cat开始通常很有用。…………等等。所以我想说,使用猫可能是有原因的。当然,猫可以在最后被移走,但有些太懒惰了。
- 现在您可以在Windows10上安装bash,只需在MicrosoftStore中搜索"ubuntu",然后按照描述中的说明进行操作。
后一个版本的记事本++显然根本没有包含textfx插件。为了使用插件来排序/消除重复项,必须下载并安装插件(更多涉及),或者使用插件管理器添加插件。
a)简单方法(如本文所述)。
插件->插件管理器->显示插件管理器->可用选项卡->textfx字符->安装
b)更复杂的方式,如果需要另一个版本或简单的方式不起作用。
从sourceforge下载插件:
http://downloads.sourceforge.net/project/npp插件/textfx/textfx%20v0.26/textfx.v0.26.unicode.bin.zip
打开zip文件并提取nptextfx.dll
将nptextfx.dll放在notepad++插件目录中,例如:C:Program Filesotepad++插件
启动记事本++,textfx将是文件菜单项之一(如上面Colin Pickard的回答1所示)。
安装textfx插件后,按照答案1中的说明对重复项进行排序和删除。
此外,如果经常使用此命令或希望复制键盘快捷方式(如文本板中的F9)进行排序,请考虑使用"设置>快捷方式映射器"设置键盘快捷方式。
- 在记事本+7.6中,插件应该添加到C:\Users\\AppData\Local
otepad++\plugins
ppTextFX中。除此之外,这仍然有效。
您可能需要一个插件来完成此操作。您可以尝试conyedit的命令行cc.ddl(删除重复行)。它是文本编辑器的交叉编辑器插件,包括记事本++。
当conyedit在后台运行时,请执行以下步骤:
在文本末尾输入命令行cc.ddl。
复制文本和命令行。
粘贴,你就会看到你想要的。
例子
没有人为我工作。
解决方案是:
替换
具有
- 创建了一个测试文件来尝试此操作,但正则表达式无法可靠地完成此操作。
- 就我所有的数据而言,它运行得很好。我忘了我的解决方案是什么。添加更多失败的细节,以便其他人可以改进此regex。
- 我创建了一个文件,所以每行上都有一个0-999之间的整数,以随机顺序排列,有时还有重复的。它没有删除大部分重复项,也没有删除任何重复项,没有顺序。
- 请提供两个工作和不工作的例子。它会帮助别人。
- 唯一为我工作的人(核电站7.3)。谢谢:
- Sickboy伟大!
- 为什么是^(.*)\s+(
?
\1\s+)+$而不是^(.*)\s*(
?
\1\s*)+$?
- 嘿,我把我写的这个regex的上下文弄丢了,但是你指出的区别是1个或多个字符对0个或多个字符,但是如果我写的是+而不是*那就意味着我尝试了*然后得出了+的解决方案,所以答案必须正确。
搜索正则表达式:\b(\w+)\b([\w\W]*)\b\1\b。
换成:$1$2。
单击"替换"按钮,直到文件中的正则表达式不再匹配为止。
- 创建了一个测试文件来尝试此操作,但正则表达式无法可靠地完成此操作。
- 这是否要求文件已经排序?
- 这个不能正常工作。
插件管理器当前不可用(不随发行版提供),您必须手动安装(https://github.com/bruderstein/nppluginmanager/releases),即使这样,许多插件也不再可用(没有textfx)插件。
可能还有另一个插件包含所需的功能。除此之外,在记事本++中唯一的方法是使用一些特殊的regex进行匹配,然后进行替换(ctrl+f->replace tab)。
虽然通过编辑菜单项(剪裁、删除空行、排序、转换EOL)可以使用许多功能,但没有"唯一"操作可用。
如果您有Windows10,那么您可以启用bash(只需在Microsoft Store中键入ubuntu并按照说明中的说明进行安装)并使用cat your_file.txt | sort | uniq > your_file_edited.txt。当然,您必须和"your_file.txt"在同一个工作目录中,或者通过路径引用它。