在Notepad ++中删除重复的行

时间:2010-10-18 10:42:56

标签: notepad++

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

15 个答案:

答案 0 :(得分:743)

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

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

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

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

menu layout in n++

答案 1 :(得分:560)

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

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

无需替换。这将从文件中最后一次出现的所有重复行中留下。

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

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

Notepad++ Replace dialogue

  • ^匹配该行的开头。

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

  • 访问
  • $匹配该行的结尾。

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

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

答案 2 :(得分:84)

如果行紧接在一起,那么您可以使用正则表达式替换

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

替换为:\1

答案 3 :(得分:29)

Notepad ++

- >替换窗口

确保在搜索模式

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

查找内容:

  

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

替换为:

  

$ 1

<强>之前:

  

我们认为

     

我们认为

     

单行

     

是否可以

     

是否可以

<强>后:

  

我们认为

     

单行

     

是否可以

答案 4 :(得分:25)

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

$ cat yourfile | sort | uniq > yourfile_nodups

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

答案 5 :(得分:14)

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

A)简单方法(如here所述)。

插件 - &gt;插件管理器 - &gt;显示插件管理器 - &gt;可用标签 - &gt; TextFX字符 - &gt;安装

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将成为文件菜单项之一(如Colin Pickard上面的答案#1所示)

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

    另外,请考虑使用设置&gt;设置键盘快捷键。 Shorcut mapper 如果您经常使用此命令或想要复制键盘快捷键,例如TextPad中的F9进行排序。

答案 6 :(得分:9)

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

编辑>线操作>“按字典顺序排列线”,

然后

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

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

答案 7 :(得分:4)

没有人为我工作。

解决方案是:

替换

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

\1

答案 8 :(得分:4)

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

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

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

示例
enter image description here

答案 9 :(得分:3)

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

将其替换为:$1$2

点击替换按钮直到文件中没有正则表达式匹配。

答案 10 :(得分:3)

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

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

答案 11 :(得分:1)

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

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

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

我有Windows 10,然后您可以启用Bash (只需在Microsoft Store中键入Ubuntu并按照说明中的说明进行安装)并使用curl -s https://www.foreca.de/Deutschland/Berlin/Berlin | grep -oP '\d+\s+hPa'。当然,您必须与“your_file.txt”位于相同的工作目录中,或通过它的路径引用它。

答案 12 :(得分:1)

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

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

  • "正则表达式"
  • 选中“。匹配换行符”选项

尽可能多地执行“全部替换”,直到您看到“0 次出现被替换”

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

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

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

enter image description here