删除notepad++中的重复行

是否有可能在notepad++中删除重复的行,只留下一行的单一出现?

829445 次浏览

如果你不关心行顺序(我认为你不关心),那么你可以使用Linux/FreeBSD/Mac OS X/Cygwin盒子,然后做:

$ cat yourfile | sort | uniq > yourfile_nodups

然后在notepad++中再次打开该文件。

带有TextFX插件的notepad++可以做到这一点,如果你想按行排序,并同时删除重复的行。

要在最新版本的notepad++中安装TextFX,您需要从这里下载:https://sourceforge.net/projects/npp-plugins/files/TextFX

TextFX插件曾经包含在旧版本的notepad++中,或者可以通过转到Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install从菜单中添加。在某些情况下,它也可能被称为TextFX Characters,但这是一样的。

需要的复选框和按钮现在将出现在菜单中:TextFX -> TextFX Tools

确保“sort”只输出唯一的…检查。接下来,选择一个文本块(Ctrl+一个选择整个文档)。最后,点击“区分大小写排序”;或者“排序行不区分大小写”;

菜单布局在n++

如果行是紧挨着的,那么你可以使用正则表达式替换:

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

替换为:\1

notepad++的后一个版本显然根本不包括TextFX插件。为了使用插件排序/消除重复,必须下载并安装插件(更复杂)或使用插件管理器添加插件。

A)简单的方法(如在这里所述)。

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

B)更复杂的方式,如果需要另一个版本或简单的方法不起作用。

  1. 从SourceForge下载插件:

    # EYZ0 < / p >

  2. 打开压缩文件,解压出NppTextFX.dll .dll

  3. 在notepad++ plugins目录中放置NppTextFX.dll,例如:
    C:\Program Files\ notepad++ \ plugins < / p > < /李>

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

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

此外,如果你经常使用这个命令,或者想复制一个键盘快捷键,比如在TextPad中使用F9进行排序,可以考虑使用设置>快捷映射器设置一个键盘快捷键。

自notepad++版本6你可以在搜索和替换对话框中使用这个正则表达式:

^(.*?)$\s+?^(?=.*^\1$)

和# EYZ0。这将在所有重复行中留下文件中最后一次出现的内容。

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

您需要勾选“正则表达式”和“正则表达式”选项。匹配换行符”:

 notepad++替换对话框

  • ^匹配行开始。

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

  • $匹配行尾。

  • 这部分匹配所有空白字符(换行符!),直到下一行开始==>删除匹配行的换行符,这样替换后就没有空行了。

  • (?=.*^\1$)这是一个正向的前向断言。这是这个正则表达式中很重要的部分,只有当文件中的其他地方有完全相同的行时,一行才会被匹配(并删除)。

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

替换为:$1$2

点击取代按钮,直到文件中的正则表达式不再匹配为止。

没有一个对我有效。

解决方案是:

取代

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

\1

notepad++

->替换window

确保在搜索模式中选择了正则表达式单选按钮

找到:

^ (. *) (\ r ? \ n \ 1) +美元

替换为:

1美元

之前:

我们认为

我们认为

一行

有可能

有可能

后:

我们认为

一行

有可能

notepad++的插件管理器目前不可用(不随发行版提供)。你必须手动安装它(https://github.com/bruderstein/nppPluginManager/releases),即使你这样做,很多插件都是不可用的(没有TextFX)插件。

也许有另一个插件包含所需的功能。除此之外,在notepad++中唯一的方法是使用一些特殊的正则表达式进行匹配,然后替换(Ctrl + F →# EYZ3选项卡)。

虽然有许多功能可通过编辑菜单项(修剪,删除空行,排序,转换EOL),但没有“唯一”操作可用。

如果你有Windows 10,那么你可以使用使Bash(在微软商店中输入Ubuntu,并按照说明安装它)和cat your_file.txt | sort | uniq > your_file_edited.txt。当然,你必须在与“your_file.txt”相同的工作目录中,或者通过它的路径引用它。

你可能需要一个插件来做到这一点。您可以尝试使用ConyEdit的命令行cc.ddl(删除重复的行)。它是一个文本编辑器的跨编辑器插件,包括notepad++。

# EYZ0

  1. 在文本末尾输入命令行cc.ddl
  2. 复制文本和命令行。
  3. 粘贴,然后你会看到你想要的。
< p > # EYZ0 < br > # EYZ0 < / p >

在7.8版中,您可以在没有任何插件的情况下完成这一点-编辑->行操作->删除连续重复的行。在此工作之前,您必须对文件进行排序,以便将重复的行按连续的顺序放置,但它确实非常有效。

排序选项可在编辑->行操作->排序按…

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

编辑在生产线操作及gt;“按字典顺序排序”;

然后

编辑在生产线操作及gt;“去除连续重复的线条”。

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

无论文件是否排序,您都可以使用下面的regex删除文件中任何位置的重复项。

^([^\r]*[^\n])(.*?)\r?\n\1$
替换为:\1\2
搜索模式:< / p >
  • “# EYZ0"
  • 检查& < >。匹配换行符< / >强"选项

点击“全部替换”;尽可能多的时间(或按住< >强Alt < / >强+<强> < / >强快捷键),直到你看到“0个事件被替换”;

在NPP中很难做到这一点。 更好的方法是:

下载cygwin实用程序,这是一个简单的Linux终端下的windows。 它允许在Windows中执行任何Linux命令。 这里有sort -u

在notepad++ 8.1版本中,有一个特定的命令可以精确地完成这个流行问题的要求。On可以使用菜单命令Edit > Line Operations > Remove Duplicate Lines删除文本文件中的重复行。

不需要安装插件(正如目前接受的答案所建议的那样),也不需要事先对行进行排序,或者像其他答案所建议的那样在Replace对话框中使用regex语法。

enter image description here

扩展顶部的答案,还可以使用第二个前向查找与其他行的几乎重复的行。

# EYZ0

这里我要对同一个<PackageReference Include=".*" 字符串进行多次引用,不管它的版本是什么。

测试数据

<PackageReference Include="Package1" Version="2.2.1" />


<PackageReference Include="Package1" Version="2.2.1" /> // Match
<PackageReference Include="Package1" Version="2.2.2" />


<PackageReference Include="Package2" Version="5.1" /> // Match
<PackageReference Include="Package2" Version="5.2" />


<PackageReference Include="Package3" Version="2.2.1" /> // No match
<PackageReference Include="Package4" Version="2.2.1" />

查看正则表达式术语的含义,并尝试使用您自己的regex101分享上的数据。

notepad++有内置操作:

Edit -> Line Operations -> Sort Lines...
Edit -> Line Operations -> Remove Duplicate Lines

也许它只适用于删除重复行,但我需要通过看到排序工作来看到操作工作。

如果它不工作,问题可能是不同的行结束,这是我现在遇到的。你可以用View -> Show Symbol -> Show End of Line检查它。

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