是否有可能在notepad++中删除重复的行,只留下一行的单一出现?
如果你不关心行顺序(我认为你不关心),那么你可以使用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,但这是一样的。
Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install
TextFX Characters
需要的复选框和按钮现在将出现在菜单中:TextFX -> TextFX Tools。
TextFX -> TextFX Tools
确保“sort”只输出唯一的…检查。接下来,选择一个文本块(Ctrl+一个选择整个文档)。最后,点击“区分大小写排序”;或者“排序行不区分大小写”;
如果行是紧挨着的,那么你可以使用正则表达式替换:
搜索模式:^(.*\r?\n)(\1)+
^(.*\r?\n)(\1)+
替换为:\1
\1
notepad++的后一个版本显然根本不包括TextFX插件。为了使用插件排序/消除重复,必须下载并安装插件(更复杂)或使用插件管理器添加插件。
A)简单的方法(如在这里所述)。
插件->插件管理->显示插件管理->可用选项卡-> TextFX字符->安装
B)更复杂的方式,如果需要另一个版本或简单的方法不起作用。
# EYZ0 < / p >
打开压缩文件,解压出NppTextFX.dll .dll
在notepad++ plugins目录中放置NppTextFX.dll,例如: C:\Program Files\ notepad++ \ plugins < / p > < /李>
启动notepad++, TextFX将是文件菜单项之一(如Colin Pickard上面的答案#1所示)
在安装TextFX插件之后,按照答案#1中的说明对重复项进行排序和删除。
此外,如果你经常使用这个命令,或者想复制一个键盘快捷键,比如在TextPad中使用F9进行排序,可以考虑使用设置>快捷映射器设置一个键盘快捷键。
自notepad++版本6你可以在搜索和替换对话框中使用这个正则表达式:
^(.*?)$\s+?^(?=.*^\1$)
和# EYZ0。这将在所有重复行中留下文件中最后一次出现的内容。
不需要排序,重复的行可以在文件中的任何地方!
您需要勾选“正则表达式”和“正则表达式”选项。匹配换行符”:
^匹配行开始。
^
(.*?)匹配任何字符0次或更多次,但尽可能少(它完全匹配一行,这是必需的,因为“。匹配换行"选项)。匹配的行会被存储,因为周围有括号,可以使用\1访问
(.*?)
$匹配行尾。
$
这部分匹配所有空白字符(换行符!),直到下一行开始==>删除匹配行的换行符,这样替换后就没有空行了。
(?=.*^\1$)这是一个正向的前向断言。这是这个正则表达式中很重要的部分,只有当文件中的其他地方有完全相同的行时,一行才会被匹配(并删除)。
(?=.*^\1$)
搜索正则表达式:\b(\w+)\b([\w\W]*)\b\1\b
\b(\w+)\b([\w\W]*)\b\1\b
替换为:$1$2
$1$2
点击取代按钮,直到文件中的正则表达式不再匹配为止。
没有一个对我有效。
解决方案是:
取代
^(.*)\s+(\r?\n\1\s+)+$
与
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”相同的工作目录中,或者通过它的路径引用它。
cat your_file.txt | sort | uniq > your_file_edited.txt
你可能需要一个插件来做到这一点。您可以尝试使用ConyEdit的命令行cc.ddl(删除重复的行)。它是一个文本编辑器的跨编辑器插件,包括notepad++。
cc.ddl
# EYZ0
在7.8版中,您可以在没有任何插件的情况下完成这一点-编辑->行操作->删除连续重复的行。在此工作之前,您必须对文件进行排序,以便将重复的行按连续的顺序放置,但它确实非常有效。
排序选项可在编辑->行操作->排序按…
到目前为止,可以使用记事本内置的功能删除所有连续重复的行。首先对行进行排序:
编辑在生产线操作及gt;“按字典顺序排序”;
然后
编辑在生产线操作及gt;“去除连续重复的线条”。
上面建议的正则表达式解决方案并没有为我删除所有重复的行,而是只删除了连续的行。
无论文件是否排序,您都可以使用下面的regex删除文件中任何位置的重复项。
^([^\r]*[^\n])(.*?)\r?\n\1$
\1\2
点击“全部替换”;尽可能多的时间(或按住< >强Alt < / >强+<强> < / >强快捷键),直到你看到“0个事件被替换”;
在notepad++ 8.1版本中,有一个特定的命令可以精确地完成这个流行问题的要求。On可以使用菜单命令Edit > Line Operations > Remove Duplicate Lines删除文本文件中的重复行。
Edit > Line Operations > Remove Duplicate Lines
不需要安装插件(正如目前接受的答案所建议的那样),也不需要事先对行进行排序,或者像其他答案所建议的那样在Replace对话框中使用regex语法。
扩展顶部的答案,还可以使用第二个前向查找与其他行的几乎重复的行。
这里我要对同一个<PackageReference Include=".*" 字符串进行多次引用,不管它的版本是什么。
<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检查它。
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