在记事本++中删除重复的行


Answers:


759

如果您想按行排序,并且同时删除重复的行,则记事本++可以执行此操作。

您将需要TextFX插件。以前曾经包含在Notepad ++的较早版本中,但是如果您有较新的版本,则可以从菜单中转到来添加它Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install。在某些情况下,它也可以称为TextFX Characters,但这是同一回事

现在,所需的复选框和按钮将显示在菜单下:TextFX -> TextFX Tools

确保选中“仅将输出排序为唯一...”。接下来,选择一个文本块(Ctrl+ A选择整个文档)。最后,点击“区分大小写的行”或“区分大小写的行”

n ++中的菜单布局


32
尽管功能强大,但功能强大。希望他们永远不要从标准NPP插件提供中删除该插件。考虑了此插件的所有功能的人有点像“幻想者”。
GeertVc 2014年

7
比excel更强大。
Vasu 2015年

6
那Notepad ++ x64版本呢?插件TextFX x64版本不存在
地理

15
TextFx不是64位版本。
Rhyous

4
@Geograph并且不会有TextFx的64位插件,请参阅此注释。因此,最好知道是否有一个替代插件来提供排序和重复项删除。
罗伯特

640

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

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

一无所获。这将使所有重复的行中文件中的最后一次出现。

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

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

Notepad ++替换对话框

  • ^ 匹配行的开头。

  • (.*?)匹配任何字符0次或多次,但尽可能少(它与行完全匹配,这是必需的,因为“ .matches newline”选项是必需的)。之所以存储匹配的行,是因为方括号括起来并且可以使用\1

  • $ 匹配行尾。

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

  • (?=.*^\1$)这是一个积极的提前断言。这是此正则表达式中的重要部分,当文件中其他位置后面紧跟同一行时,仅匹配(并删除)一行。


10
哦,这是一个很棒的方法,它甚至删除了空行,这时我正在对其进行
宏处理

65
在某些情况下,它仅删除文件中的所有行。
SerG 2014年

3
有什么办法可以消除最后出现的情况?这匹配除最后一个以外的所有...
Cullub 2014年

28
在我的情况下,如果此解决方案删除了​​所有行,则取消选中. matches newline就可以了。
Kuitsi

3
@SerG在某些情况下,它对我也不起作用,但是当我删除“ matches newline”时,它就
起作用

95

如果各行紧接,则可以使用正则表达式替换:

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

用。。。来代替: \1


1
也许其他人对此很幸运,但是对我而言,^(。* \ n)\ 1导致“无法找到文本”
b1nary.atr0phy

4
@ b1naryatr0phy确保将“搜索模式”设置为“正则表达式”,我还更新了模式,使其可以处理Windows样式行的结尾
格兰特·彼得斯

3
notepad ++具有一个轻量级的正则表达式引擎,它不允许高级功能,甚至不允许使用“?或\ r \ n”,因为它只能在一行上使用,并且您在$ \ r \ n字符上使用$
Stefan Rogin

3
这样一一消除。您必须重复多次。我不知道为什么\ n +-> \ n无法正常工作(以为它报告了很多替代品)
2012年

2
@Val,如果将匹配的后向引用部分设置为需要1个或多个匹配的组,则该模式一次将匹配N个连续的重复行:^(.*\r?\n)(\1)+
Kenigmatic 2016年

37

记事本++

->替换窗口

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

找什么:

^(。*)(\ r?\ n \ 1)+ $

用。。。来代替:

$ 1

之前:

我们认为

我们认为

单线

是否有可能

是否有可能

后:

我们认为

单线

是否有可能


2
不需要对文件进行排序以使其正常工作吗?
彼得·莫滕森


30

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

$ cat yourfile | sort | uniq > yourfile_nodups

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


3
在Windows 7中不起作用'cat' is not recognized as an internal or external command, operable program or batch file.
伊恩·麦克莱恩塞缪尔长老

2
@Iain Elder:cat是标准的Unix实用程序,这就是为什么此答案指定它可以在linux,FreeBSD和MacOSX上运行的原因。答案也暗示Cygwyn:这是一个Windows程序,为您提供unix样式的shell,并带有cat。长话短说(太晚了!):Win 7需要Cygwin来做到这一点。
特拉维斯·克拉克

11
在Windows中您具有强大的功能:cat yourfile | sort -Unique
Elazar

9
这些都是“无偿使用猫”的好例子。忘记cat工具,直接使用文件重定向即可:sort <yourfile | uniq> yourfile_nodups
scott8035 '16

1
@ scott8035,我同意cat对于运行该命令没有用,但是我发现找出一长串非显而易见的命令(例如cat文件)时从cat开始通常会有所帮助。sed ... | sed ... | sed ...等等。因此,我想说也许有使用猫的理由。当然可以在最后将猫移走,但是有些懒惰。
FORTRAN

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. 打开压缩文件并解压缩NppTextFX.dll

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

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

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

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


在notepad ++ 7.6中,应将插件添加到中C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX。除此之外,它仍然可以正常工作。
P_W999

14

在7.8版中,您无需任何插件即可完成此操作-编辑->行操作->删除连续重复的行。您必须先对文件进行排序,才能以连续的顺序放置重复的行,但这确实像一个超级按钮。

排序选项在“编辑”->“行操作”->“排序依据...”下可用


7

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

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

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


在此处输入图片说明


5

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

替换为: $1$2

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


创建了一个测试文件来尝试此操作,但是正则表达式无法可靠地完成工作。
RockPaperLizard '16

您能否提供一个失败的示例,以便我改善答案?
Hesham Eraqi

4

没有人为我工作。

一个解决方案是:

更换

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

\1

创建了一个测试文件来尝试此操作,但是正则表达式无法可靠地完成工作。
RockPaperLizard '16

对于我所有的数据来说,它都工作正常。我忘记了我的解决方案。在失败的地方添加更多详细信息,以便其他人可以改进此正则表达式。
Manohar Reddy Poreddy

我创建了一个文件,因此每行上都有一个介于0-999之间的整数,并且以随机顺序排列,有时会重复。它没有删除大多数重复项,也没有删除没有顺序的任何重复项。
RockPaperLizard '16

1
请提供2个工作示例和非工作示例。它会帮助某人。
Manohar Reddy Poreddy,2016年

1
为什么^(.*)\s+(\r?\n\1\s+)+$和不^(.*)\s*(\r?\n\1\s*)+$
Mark Ch '18

2

对于Notepad ++,插件管理器当前不可用(不随发行版提供)。您必须手动安装(https://github.com/bruderstein/nppPluginManager/releases),即使这样做,很多插件也不再可用(没有TextFX)。

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

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

如果您使用Windows 10,则可以启用Bash(只需在Microsoft Store中键入Ubuntu,然后按照说明中的说明进行安装即可)并使用cat your_file.txt | sort | uniq > your_file_edited.txt。当然,您必须与“ your_file.txt”位于同一工作目录中,或通过其路径进行引用。

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.