在Notepad ++中删除重复的行

UGE*_*EEN 574 notepad++ duplicates

是否可以删除Notepad ++中的重复行,只留下一行?

Col*_*ard 751

Notepad ++可以执行此操作,前提是您希望逐行排序,并同时删除重复的行.

您将需要TextFX插件.这曾经包含在旧版本的Notepad ++中,但如果您有更新的版本,可以通过转到菜单中添加它Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install.在某些情况下,它也可能被调用TextFX Characters,但这是一回事

该复选框和按钮所需现在将出现在菜单下:TextFX -> TextFX Tools.

确保选中"仅排序输出唯一...".接下来,选择一个文本块(Ctrl+ A以选择整个文档).最后,单击"排序区分大小写"或"排序行不区分大小写"

n ++中的菜单布局

  • 令人难以置信的强大插件,尽管它的"年龄".希望他们永远不会从标准的NPP插件中删除那个.想到这个插件中所有功能的人,有点像"有远见". (31认同)
  • TextFx不是64位版本. (11认同)
  • Notepad ++ x64版本怎么样?插件TextFX x64版本不存在 (6认同)
  • 比excel更强大. (5认同)
  • @Geograph并没有TextFx的64位插件见[注释](http://docs.notepad-plus-plus.org/index.php/TextFX%27s_Future).因此,最好知道是否有替代插件提供排序和重复删除. (3认同)
  • Textpad用一个键做到了 - F9希望NP ++也可以为这个操作提供热键. (2认同)

ste*_*ema 594

从Notepad ++ Version 6开始,您可以在搜索和替换对话框中使用此正则表达式:

^(.*?)$\s+?^(?=.*^\1$)
Run Code Online (Sandbox Code Playgroud)

并且什么也没有替换.这将从文件中最后一次出现的所有重复行中留下.

不需要排序,重复的行可以在文件中的任何位置!

您需要选中"正则表达式"和".匹配换行符"选项:

Notepad ++替换对话框

  • ^ 匹配行的开头.

  • (.*?)匹配任何字符0次或更多次,但尽可能少(它完全匹配行,因为"匹配换行"选项,这是必需的).匹配的行被存储,因为括号周围和可访问使用\1

  • $ 匹配行的结尾.

  • \s+?^ 此部分匹配所有空格字符(换行符!),直到下一行的开头==>这将删除匹配行之后的换行符,以便在替换后没有空行.

  • (?=.*^\1$)这是一个积极的前瞻性断言.这是此正则表达式中的重要部分,只有在文件中的其他位置之后存在完全相同的行时,才会匹配(并删除)行.

  • 在某些情况下,它只删除文件中的所有行. (61认同)
  • 在我的情况下,此解决方案删除所有行,取消选中`.匹配换行`做了伎俩. (27认同)
  • 哦,这个很棒,它甚至删除了空行,我现在正在将它宏观化:) (8认同)
  • 有没有办法删除最后一次发生?这匹配除了最后一个之外的所有... (3认同)
  • @SerG在某些情况下它也不适用于我,但是当我删除"匹配换行符"时它确实:) (3认同)
  • **完美!** 我在无法访问互联网的锁定系统上使用 Notepad++。无法下载插件,所以这对我来说更好。 (2认同)
  • 如果稍微调整捕获组,则可以解决删除文件的副作用:^([^ \ r \ n] *)$ \ s +?^(?=。* ^ \ 1 $) (2认同)
  • 对我来说,只有在使用本机排序功能对行进行排序后才能正常工作(菜单编辑→行操作→按字典顺序升序/降序对行进行排序) (2认同)

div*_*nex 93

从 Notepad++ 8.1 版开始,有一个特定的命令可以精确执行这个常见问题的要求。On 可以使用菜单命令删除文本文件中的重复行Edit > Line Operations > Remove Duplicate Lines

无需安装插件(如当前接受的答案所示),或预先对行进行排序,或在替换对话框中使用正则表达式语法,如其他答案建议的那样。

在此输入图像描述

  • 这完全可以开箱即用。恕我直言,应该是公认的答案 (6认同)
  • 这是完美的解决方案,节省了我大量的时间来使用 Excel 并执行基于 Einstein 的操作。 (5认同)
  • 这应该被标记为正确的解决方案,因为另一个已经过时了 (4认同)
  • 优秀的答案和最简单的方法。它对我来说非常有效。 (3认同)

Gra*_*ers 89

如果行紧接在彼此之后,那么您可以使用正则表达式替换

搜索模式: ^(.*\r?\n)(\1)+

用...来代替: \1

  • @ b1naryatr0phy确保你将"搜索模式"设置为"正则表达式",我还更新了模式,以便它可以处理窗口样式的行结尾 (3认同)
  • notepad ++有一个轻型正则表达式引擎,它不允许高级功能,甚至不允许"?或\ r \n",因为它只能在单行上工作而你使用$作为\ r \n字符 (3认同)
  • 这一个一个地消除了.你必须重复多次.我想知道为什么\n + - > \n不起作用(认为它报告了很多替换) (3认同)
  • @Val,如果你使匹配的后引用部分成为需要1个或多个匹配的组,则模式将一次匹配N个连续的重复行:`^(.*\r?\n)(\ 1)+` (2认同)

blu*_*xff 36

记事本+ +

- >更换窗口

确保在搜索模式下

您已选择正则表达式单选按钮

找什么:

^(.*)(\ r吗?\n\1)+ $

用...来代替:

$ 1

之前:

我们在那里思考

我们在那里思考

单线

是否有可能

是否有可能

后:

我们在那里思考

单线

是否有可能

  • 是否需要对文件进行排序才能使其工作? (3认同)

dr.*_*xon 31

在 7.8 版本中,您无需任何插件即可完成此操作 - 编辑 -> 行操作 -> 删除连续重复行。在此工作之前,您必须对文件进行排序以按连续顺序放置重复的行,但它确实像魅力一样工作。

排序选项在 Edit -> Line Operations -> Sort By ... 下可用

  • 现在还有一个选项“编辑”->“行操作”->“删除重复行”,从而无需排序。 (3认同)
  • 第一个选项应删除文档中每个匹配行(仅保留一个)的所有匹配行(因此 a、a、b、a、c 将变为 a、b、c)。第二个选项应该只删除匹配行之后立即重复的行(a、a、b、a、c 将变为 a、b、a、c)。 (3认同)

Pab*_*ruz 29

如果你不关心行顺序(我不认为你这样做),那么你可以使用Linux/FreeBSD/Mac OS X/Cygwin框并执行:

$ cat yourfile | sort | uniq > yourfile_nodups
Run Code Online (Sandbox Code Playgroud)

然后在Notepad ++中再次打开该文件.

  • 在Windows中你有powershell:`cat yourfile | sort -Unique` (11认同)
  • 这些都是"无偿使用猫"的好例子.忘记cat实用程序,然后只使用文件重定向:sort**<yourfile**| uniq> yourfile_nodups (9认同)
  • 在Windows 7上不起作用."'cat'不被识别为内部或外部命令,可操作程序或批处理文件 (3认同)
  • @Iain Elder:cat是一个标准的Unix实用程序,这就是为什么这个答案指明它适用于linux,FreeBSD和MacOSX.答案还建议Cygwyn:这是一个Windows程序,它为你提供了一个unix风格的shell,并且有了它.长话短说(太迟了!):Win 7需要Cygwin才能做到这一点. (2认同)

eea*_*rly 17

后者版本的Notepad ++根本不包含TextFX插件.为了使用插件来排序/消除重复项,必须下载并安装插件(更多涉及)或使用插件管理器添加插件.

A)简单的方法(如描述在这里).

插件 - >插件管理器 - >显示插件管理器 - >可用选项卡 - > TextFX字符 - >安装

B)更多参与方式,如果需要另一个版本或简单方法不起作用.

  1. 从SourceForge下载插件:

    http://downloads.sourceforge.net/project/npp-plugins/TextFX/TextFX%20v0.26/TextFX.v0.26.unicode.bin.zip

  2. 打开zip文件并解压缩NppTextFX.dll

  3. NppTextFX.dll放在Notepad ++插件目录中,例如:
    C:\ Program Files\Notepad ++\plugins

  4. 启动Notepad ++,TextFX将成为文件菜单项之一(如上面的答案#1中的Colin Pickard所示)

安装TextFX插件后,请按照答案#1中的说明进行排序和删除重复项.

另外,如果经常使用此命令或想要复制键盘快捷键(例如TextPad中的F9)进行排序,请考虑使用"设置">"Shorcut"映射器设置键盘快捷键.


SaP*_*per 14

到目前为止,可以使用记事本内置功能删除所有连续的重复行。首先对行进行排序:

编辑 > 行操作 > “按字典顺序对行进行排序”,

然后

编辑 > 行操作 > “删除连续的重复行”。

上面建议的正则表达式解决方案并没有为我删除所有重复的行,但也删除了连续的行。


Dal*_*ton 9

Notepad++ has builtin operations:

Edit -> Line Operations -> Sort Lines...
Edit -> Line Operations -> Remove Duplicate Lines
Run Code Online (Sandbox Code Playgroud)

Maybe it works with just Remove Duplicate Lines, but I needed to see that the operations work by seeing that sorting works.

If it doesn't work, problem could be with different ending of lines, which I encountered now. You can check it with View -> Show Symbol -> Show End of Line. Replace it to have it same.

Click on Search > Replace (or Ctrl + H)
Find what:  \r\n
Replace with: \n
Search Mode: select Extended (\n, \r,...)
Replace All
Run Code Online (Sandbox Code Playgroud)


Don*_*ald 7

您可能需要插件才能执行此操作。您可以尝试ConyEdit的命令行cc.ddl(删除重复的行)。它是文本编辑器(包括Notepad ++)的跨编辑器插件。

在ConyEdit在后台运行的情况下,请执行以下步骤:

  1. cc.ddl在文本末尾输入命令行。
  2. 复制文本和命令行。
  3. 粘贴,然后您将看到所需的内容。


在此处输入图片说明


Hes*_*aqi 5

搜索正则表达式: \b(\w+)\b([\w\W]*)\b\1\b

替换为: $1$2

点击替换按钮,直到文件中的正则表达式不再匹配。


Man*_*ddy 5

没有人为我工作。

一个解决方案是:

更换

^(.*)\s+(\r?\n\1\s+)+$
Run Code Online (Sandbox Code Playgroud)

\1
Run Code Online (Sandbox Code Playgroud)


αғs*_*нιη 5

无论文件是否已排序,您都可以使用下面的正则表达式来删除文件中任何位置出现的重复项。

查找内容:^([^\r]*[^\n])(.*?)\r?\n\1$
替换为:\1\2
搜索模式:

  • 正则表达式
  • 检查“ .匹配换行符”选项

尽可能多次单击“全部替换”(或按住Alt+A快捷键),直到看到“0 个匹配项已被替换”