是否可以在 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
。
确保选中“仅对唯一输出排序...”。接下来,选择一个文本块(Ctrl+A 选择整个文档)。最后,单击“排序行区分大小写”或“排序行不区分大小写”
https://i.stack.imgur.com/1qnvS.png
由于 Notepad++ 版本 6,您可以在搜索和替换对话框中使用此正则表达式:
^(.*?)$\s+?^(?=.*^\1$)
并一无所有。这会从所有重复行中留下文件中的最后一次出现。
不需要排序,重复的行可以在文件中的任何位置!
您需要检查选项“正则表达式”和“。匹配换行符”:
https://i.imgur.com/dY3LCMD.png
^ 匹配行首。
(.*?) 匹配任何字符 0 次或多次,但尽可能少(它完全匹配行,这是必需的,因为“.matches newline”选项)。匹配的行被存储,因为括号周围和使用 \1 访问
匹配行尾。
\s+?^ 这部分匹配所有空白字符(换行符!)直到下一行的开始 ==> 这将删除匹配行之后的换行符,因此替换后没有空行。
(?=.*^\1$) 这是一个积极的前瞻断言。这是此正则表达式中的重要部分,只有当文件中的其他位置有完全相同的行时,才会匹配(并删除)行。
. matches newline
就可以了。
如果这些行紧随其后,那么您可以使用正则表达式替换:
搜索模式:^(.*\r?\n)(\1)+
替换为:\1
^(.*\r?\n)(\1)+
在 7.8 版中,您无需任何插件即可完成此操作 - 编辑 -> 行操作 -> 删除连续重复行。在此工作之前,您必须对文件进行排序以连续放置重复的行,但它确实像一个魅力。
排序选项在编辑 -> 行操作 -> 排序方式下可用...
记事本++
-> 替换窗口
确保在搜索模式下您选择了正则表达式单选按钮
找什么:
^(.*)(\r?\n\1)+$
用。。。来代替:
1美元
前:
我们认为那里 我们认为那里 单线 有没有可能 有没有可能
后:
我们认为有单行是否有可能
如果您不关心行顺序(我认为您不关心),那么您可以使用 Linux/FreeBSD/Mac OS X/Cygwin 框并执行以下操作:
$ cat yourfile | sort | uniq > yourfile_nodups
然后在 Notepad++ 中再次打开该文件。
'cat' is not recognized as an internal or external command, operable program or batch file.
cat yourfile | sort -Unique
从 Notepad++ 8.1 版开始,有一个特定的命令可以准确地完成这个热门问题的要求。 On 可以使用菜单命令 Edit > Line Operations > Remove Duplicate Lines
删除文本文件中的重复行。
无需安装插件(如当前接受的答案所建议的那样),或预先对行进行排序,或在替换对话框中使用正则表达式语法作为其他答案的建议。
https://i.stack.imgur.com/BWJZJ.png
Notepad++ 的后一版本显然根本不包含 TextFX 插件。为了使用插件进行排序/消除重复,插件必须下载并安装(更多涉及)或使用插件管理器添加。
A) 简单的方法(如here所述)。
插件 -> 插件管理器 -> 显示插件管理器 -> 可用选项卡 -> TextFX 字符 -> 安装
B) 更复杂的方式,如果需要另一个版本或简单的方式不起作用。
从 SourceForge 下载插件:http://downloads.sourceforge.net/project/npp-plugins/TextFX/TextFX%20v0.26/TextFX.v0.26.unicode.bin.zip 打开 zip 文件并解压 NppTextFX.dll将 NppTextFX.dll 放在 Notepad++ 插件目录中,例如:C:\Program Files\Notepad++\plugins 启动 Notepad++,TextFX 将成为文件菜单项之一(如上面 Colin Pickard 的答案 #1 所示)
安装 TextFX 插件后,按照答案 #1 中的说明对重复项进行排序和删除。
此外,如果您经常使用此命令或想要复制键盘快捷键(例如 TextPad 中的 F9 进行排序),请考虑使用 Settings > Shorcut mapper 设置键盘快捷键。
C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX
。除此之外,这仍然可以正常工作。
截至目前,可以使用记事本内置功能删除所有连续的重复行。首先对行进行排序:
编辑>行操作>“按字典顺序排序行”,
然后
编辑 > 行操作 > “删除连续重复行”。
上面建议的正则表达式解决方案并没有为我删除所有重复的行,但也只是删除了连续的行。
您可能需要一个插件来执行此操作。您可以试试ConyEdit的命令行cc.ddl
(删除重复行)。它是文本编辑器的交叉编辑器插件,包括 Notepad++。
随着 ConyEdit 在后台运行,请按照以下步骤操作:
在文本末尾输入命令行 cc.ddl。复制文本和命令行。粘贴,然后你会看到你想要的。
https://i.stack.imgur.com/EtPOM.gif
搜索正则表达式:\b(\w+)\b([\w\W]*)\b\1\b
将其替换为:$1$2
点击替换按钮,直到文件中的正则表达式不再匹配。
没有一个对我有用。
一个解决方案是:
代替
^(.*)\s+(\r?\n\1\s+)+$
和
\1
^(.*)\s+(\r?\n\1\s+)+$
而不是 ^(.*)\s*(\r?\n\1\s*)+$
?
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”位于同一工作目录中,或者通过其路径引用它。
无论文件是否已排序,您都可以使用下面的正则表达式来删除文件中任何位置的重复项。
查找内容:^([^\r]*[^\n])(.*?)\r?\n\1$
替换为:\1\2
搜索模式:
“正则表达式”
检查“。匹配换行符”选项
尽可能多地执行“全部替换”,直到您看到“0 次出现已被替换”
扩展最佳答案,您还可以使用第二次前瞻来查找几乎与其他行重复的行。
^(\s*(<PackageReference Include=".*" Version=).*)$\s+?^(?=.*^\2.*$)
在这里,我多次引用相同的 <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 share 上使用您自己的数据。
在 NPP 中很难做到这一点。更好的方法如下:
下载cygwin实用程序,它是windows下的简单Linux终端。它允许在 Windows 中执行任何 Linux 命令。你有 sort -u 那里。