2010-10-18 236 views

回答

682

Notepad ++可以做到這一點,只要你想按行排序,並同時刪除重複的行。

您將需要TextFX插件。它曾經被包含在老版本的Notepad ++中,但是如果你有更新的版本,你可以通過Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install從菜單中添加它。在某些情況下,它也可能被稱爲TextFX Characters,但這是相同的東西

所需的複選框和按鈕現在將出現在菜單下:TextFX -> TextFX Tools

確保選中「僅排序輸出唯一...」。接下來,選擇一個文本塊(Ctrl + A選擇整個文檔)。最後,單擊「排序線區分大小寫」或「之類的行不區分大小寫」

menu layout in n++

+25

儘管它的「年齡」,卻非常強大的插件。希望他們永遠不會從標準的NPP插件報價中刪除那個。那個想到這個插件中所有功能的人,是一個「有遠見的人」。 – GeertVc 2014-09-01 09:32:31

+0

請注意,如果該文件是隻讀的,則此方法不會給出任何警告。無論如何,我的文件被分類,所以似乎該工具已經工作,直到我發現重複。相當令人沮喪,直到我嘗試@ stema的搜索和替換方法,它警告我。 – 2014-12-04 12:44:02

+3

比excel更強大。 – Vasu 2015-04-22 21:58:02

23

如果你不關心行順序(我不認爲你這樣做),那麼你可以使用一個Linux/FreeBSD的/ MacOSX的/ Cygwin的框,並執行:

$ cat yourfile | sort | uniq > yourfile_nodups 

然後打開在Notepad ++中再次文件。

+2

在Windows 7上不起作用。'貓'不被識別爲內部或外部命令,可操作程序或批處理文件。' – 2014-12-11 16:50:35

+0

@Iain Elder:cat是標準的Unix工具,這就是爲什麼這個答案指定它可以在linux,FreeBSD和MacOSX上運行。答案還表明Cygwyn:這是一個Windows程序,它爲您提供了一個unix風格的外殼,並且帶有它。長話短說(太晚了!):Win 7需要Cygwin來做到這一點。 – 2015-01-14 16:14:39

+6

在windows中你有powershell:'cat yourfile |排序 - 獨特' – Elazar 2015-08-05 11:32:14

68

如果行立即都是經過對方,那麼你可以使用正則表達式替換

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

替換爲:\1

+0

也許別人對此有好運,但對於我^(。* \ n)\ 1導致「無法找到文本」 – 2012-04-28 18:18:18

+2

@ b1naryatr0phy確保您將「搜索模式」設置爲「正則表達式」,我也更新了該模式,以便它可以處理窗口樣式行結尾 – 2012-05-01 13:25:27

+3

notepad ++有一個輕型正則表達式引擎,它不允許高級功能,甚至不是「?或\ r \ n」,因爲它只能在一條線上工作,並且您使用$爲\ r \ n字符 – 2012-05-25 16:39:33

13

Notepad ++的後面版本根本沒有包含TextFX插件。爲了使用插件排序/消除重複項,插件必須下載並安裝(更多參與)或使用插件管理器添加。 A)簡單的方法(如描述的here)。

插件 - >插件管理器 - >顯示插件管理器 - >可用選項卡 - > TextFX字符 - >安裝

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在記事本+ +插件目錄,如:
    C:\ Program Files文件\記事本++ \插件

  4. 啓動記事本++,並TextFX將文件菜單項(由柯林回答#1以上可見Pickard)

安裝TextFX插件後,請按照答案#1中的說明進行排序和刪除重複項。

另外,如果您經常使用此命令或想要複製鍵盤快捷鍵(例如TextPad中的F9)進行排序,請考慮使用設置> Shorcut映射器設置鍵盤快捷鍵。

428

自從記事本++版本6你可以在搜索中使用這個表達式和替換對話:

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

更換什麼。這會從所有重複行中留下文件中的最後一個事件。

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

你需要檢查選項 「正則表達式」 和 「匹配換行符。」:

Notepad++ Replace dialogue

  • ^行的開頭匹配。

  • (.*?)匹配0或更多次的任何字符,但儘可能少(它匹配在行上,這是因爲「。matches newline」選項需要)。匹配的行被存儲,因爲可以使用左右括號並且可以使用\1

  • $匹配行結束。

  • \s+?^這部分匹配所有的空格字符(換行符)直到下一行的開始==>這將刪除匹配行後的換行符,以便在替換後沒有空行。

  • (?=.*^\1$)這是一個積極的lookahead斷言。這是這個正則表達式中的重要部分,只有在文件中某個地方出現完全相同的行時纔會匹配(併除去)一行。

+0

這個比其他正則表達式更好。無需多次傳遞消除所有重複。 – Benny 2013-06-20 03:55:12

+5

哦,這一個是輝煌的,它甚至刪除空行,我正在宏觀它這一刻:) – Aprillion 2013-06-28 16:14:09

+0

偉大的學習。精確的解釋!感謝提升者和答覆者! – SarjanWebDev 2013-10-29 01:50:54

1

搜索正則表達式:\ B(\ W +)\ B([\ W \ W] *)\ B \ 1 \ b

其替換爲:$ 1 $ 2

點擊替換按鈕,直到文件中沒有更多匹配正則表達式。

+0

創建一個測試文件來嘗試這個,但正則表達式不能可靠地工作,以完成工作。 – RockPaperLizard 2016-03-20 05:29:23

3

沒有爲我工作。

一種解決方案是:

替換

^\ S + + $

\ 1

(。*)(\ r \ n \ 1個\ S +?)

來源: http://sortedinf.com/?q=remove-duplicate-rows-in-notepad-plus-plus

+0

創建一個測試文件來嘗試這個,但正則表達式不能可靠地工作來完成工作。 – RockPaperLizard 2016-03-20 05:28:30

+0

對於我的所有數據,它工作得很好。我忘記了我的解決方案。在失敗的位置添加更多細節,以便其他人可以改進此正則表達式。 – 2016-03-20 05:46:58

+0

我創建了一個文件,每行都有一個0-999之間的整數,按照隨機順序,有時候是重複的。它沒有刪除大部分重複項,也沒有刪除沒有順序的重複項。 – RockPaperLizard 2016-03-20 05:58:27

15

記事本++

- >替換窗口

確保在搜索模式

您選擇正則表達式單選按鈕

查找內容:

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

替換:

$ 1

前:

,我們認爲有

,我們認爲有

單行

是否有可能

是否有可能

後:

,我們認爲有

單行

是否有可能

1

的插件管理器是當前不可用(不來分配)的記事本+ +,您必須手動安裝(https://github.com/bruderstein/nppPluginManager/releases),甚至,如果你這樣做,很多插件不可用不再(沒有TextFX)插件。

也許有它包含所需功能的另一個插件。除此之外,做在記事本中唯一的辦法++是使用匹配,然後更換一些特殊正則表達式CTRL + F - >替換選項卡)。

雖然有通過編輯菜單項可用的許多功能(修邊,去除空行,分選,轉換EOL)沒有可用的「獨特的」的操作。

我有Windows 10,然後你可以啓用Bash(只需在Microsoft Store中鍵入Ubuntu並按照說明中的說明進行安裝)並使用cat your_file.txt | sort | uniq > your_file_edited.txt。當然,你必須和「your_file.txt」在同一個工作目錄下,或者通過它的路徑引用它。