Notepad++ 透過選單路徑 Edit → Line Operations → Remove Duplicate Lines 來移除重複的行,這個指令會從目前作用中的文件或選取範圍中刪除每一個重複的行,只保留每個值第一次出現的內容。這個指令在 Notepad++ 6.5.2 版本中首次引入,並且適用於純文字、程式碼、記錄檔、CSV 匯出檔,以及編輯器能開啟的任何其他以行為導向的內容。
內建指令會逐字元完全比對每一行,包括大小寫、前後空白、Tab 鍵、內部間距、標點符號以及 Unicode 字元。根據這個規則,「Apple」和「apple」會被視為兩個獨立的項目,而一行結尾多了一個多餘空格的內容,也會和沒有該空格的相同可見字母視為不同。如果您的清單混用了不同大小寫或夾帶多餘空白,您要嘛需要先清理文字,要嘛改用可以切換為不區分大小寫並忽略邊緣空白的比對工具。這個指令只會在您看得見的緩衝區上運作;不會有任何資料被傳送到伺服器,而且 Undo (Ctrl+Z) 可以完整還原檔案到原始狀態。

指令的位置,以及舊版指令過去的位置
在 Notepad++ 6.5.2 推出自家的重複行指令之前,編輯器內部唯一被廣泛使用的選項就是 TextFX 外掛。TextFX 加入了「TextFX Tools → Sort lines case insensitive (at column)」的工作流程,再搭配周圍的刪除重複巨集,幾乎十年來都是論壇上的標準答案。該外掛是一個 32 位元的 DLL,現代的 64 位元 Notepad++ 版本無法載入它。許多至今仍排名很高的教學指南都會提到 TextFX,因為舊的文章仍會被搜尋索引到,但這個外掛已經不再維護,也不會出現在現在的 Plugin Manager 列表中。
現在的 Notepad++ 在任何近期版本中都能透過原生選單看到這個功能。兩個相關的項目是:
- Edit → Line Operations → Remove Duplicate Lines,這是現代無需外掛的路徑,會刪除目前文件或選取範圍中的每一個重複行。
- Edit → Line Operations → Remove Consecutive Duplicate Lines,只會合併彼此相鄰且相同的重複行,散落各處的重複則不會被處理。
如果您有選取文字,這兩個指令都會作用於目前的選取範圍;否則就會作用於整份文件。復原緩衝區會保留原始內容,所以快速按下 Ctrl+Z 就可以在結果不如預期時完整還原。
如何在 Notepad++ 中移除重複的行
只要檔案已開啟,內建指令只需一次選單點擊。在任何現代的 64 位元 Notepad++ 版本上,請依照下列步驟操作:
- 透過 File → Open 開啟您的檔案,或將清單貼到新分頁中。每個值都必須各佔一行;如果您的文字是以逗號分隔,請先透過欄位轉清單的轉換工具處理,讓每個值各自落在獨立的一行。
- 選取您要清理的文字區塊。如果沒有選取任何內容,Notepad++ 會對整份文件執行該指令,因此游標停留在檔案中的任何位置都是安全的。
- 點擊選單列中的 Edit,將游標移到 Line Operations,然後選擇 Remove Duplicate Lines。在大型檔案中,狀態列會短暫顯示訊息確認操作已完成。
- 檢查結果。由於比對會區分大小寫和空白,「orange」和「Orange 」(請注意結尾的空格)會以兩行不同的內容保留下來。在儲存之前,請抽查變動區域的開頭和結尾。
- 按下 Ctrl+S 儲存,或透過 File → Save As 在保留原始檔案的同時,另存去重後的版本。在您儲存之前,Ctrl+Z 仍然可以不留痕跡地還原這次的變更。
如果您的重複項目聚集在一起,而不是散落在檔案各處,請改用 Edit → Line Operations → Remove Consecutive Duplicate Lines。這個變體只會合併相鄰且相同的行,對於清理記錄檔很實用,因為記錄檔中同一行常常會在系統繼續下一筆紀錄之前連續重複出現。
大小寫、空白與空白行
Notepad++ 的內建指令將每一個完整的行視為比對鍵,因此每一個可見字元都會參與比對。這個設計會帶來三個實際的影響。
大小寫會影響結果。「Apple」、「apple」和「APPLE」是三個不同的鍵,除非您預先將檔案標準化,否則三者都會在去重過程中保留下來。最簡單的解決方法是在移除重複之前先執行 Edit → Convert Case to → lower case;但這麼做會改變保留下來的文字內容,所以請先備份檔案,或將標準化後的副本另存成不同的檔名。
空白會影響結果。包含「 apple」(兩個前置空格)的行與「apple」是不同的鍵,內建指令不會將其刪除。同理,內部的連續空格與 Tab 鍵都是比對的一部分;若其中一行結尾有空格而另一行沒有,就足以讓兩者都被保留。如果您的清單因為複製貼上而夾帶了多餘空白,請在去重之前先執行一次標準化空白的處理,或使用可以在不重寫保留內容的情況下修剪每個比對鍵邊緣的工具。MDN 文件中有關於標準 String trim 行為的說明,這類工具就是依賴該行為運作。
空白行是有效的值。第一個空行會被保留,之後每個空行都會被視為重複,因此結果中任何位置最多只會有一個空行。如果您的資料根本不應該包含空值,請在去重之後接著執行 Edit → Line Operations → Remove Empty Lines,或在空白行僅包含空白字元時使用 Remove Empty Lines (Containing Blank characters)。
一個能處理大小寫與修剪選項的瀏覽器替代方案
當您需要比單一點擊更細部的控制時——例如在不改寫原始大小寫的情況下將「Apple」和「apple」視為重複,或將結尾有空格的行視為與修剪後的鄰近行相同——請將清單貼到 Remove Duplicate Lines 工具。瀏覽器端的程式會為每一行建立比對鍵,丟棄任何已經在 Set 中出現過的鍵,並以 LF 連接保留下來的第一次出現。輸入上限為一百萬個 UTF-16 程式碼單位,足以涵蓋大量的識別碼清單或數 MB 的記錄檔片段。
經驗證的三個步驟如下:
- 將每個值一行貼入輸入欄位。空白輸入會在一開始就被拒絕,因此數量摘要永遠不會回報誤導性的單行結果。
- 切換 Ignore English letter case 將 Apple 和 apple 合併,再切換 Ignore edge whitespace 以修剪比對鍵的兩端。修剪只會套用於比對鍵,而不會影響被保留的行,因此第一次出現時的原始間距會保留下來。
- 點擊去重動作。結果面板會顯示輸入、保留與移除的數量,列出確切保留下來的行,並讓您將其複製回去。不會上傳任何內容;分割、建立鍵與連接的過程都在瀏覽器分頁中於本機完成。
同時啟用這兩個切換時,會先進行修剪再進行英文地區的小寫轉換,這符合一般英文清單的實際需求,但並不等同於腔調折疊、Unicode 標準化、模糊比對或詞幹化。如果您的資料混用了多種文字系統,或使用了像德文 sharp s 這類字母,請在貼上之前自行進行標準化。
Notepad++ 與瀏覽器去重工具的比較
兩種選項都會刪除重複的行並保留第一次出現,但它們對應的需求略有不同。下表整理了各自擅長之處。
| 能力 | Notepad++ 內建功能 | Remove Duplicate Lines 工具 |
|---|---|---|
| 執行位置 | 在編輯器內部,於開啟的檔案上 | 在瀏覽器分頁中,於貼上的文字上 |
| 不區分大小寫的比對 | 否(僅區分大小寫) | 是,透過切換選項 |
| 比對鍵的邊緣空白修剪 | 否 | 是,透過切換選項 |
| 輸出的大小寫與間距 | 一律保留(不會重寫) | 第一次出現的內容會完整保留 |
| 輸入大小上限 | 受限於檔案大小與記憶體 | 1,000,000 個 UTF-16 程式碼單位 |
| 復原 | 檔案內建的 Ctrl+Z | 編輯輸入會清除結果 |
| 資料是否離開裝置 | 否(檔案保留在本機) | 否(處理在本機進行) |
| 批次處理多個檔案 | 每次指令執行處理一個檔案 | 每次執行處理一次貼上 |
當您的文字已經是磁碟上的檔案,而且想要單一點擊、不需要複製時,Notepad++ 的方式是正確的選擇。當您需要在不改寫原始內容的情況下調整大小寫或空白規則、想要明確的「已移除/已保留」數量以便與結果一同貼上,或是當資料存在於聊天視窗、電子郵件或試算表欄位中而非已儲存的檔案時,瀏覽器工具會是正確的選擇。
在確認結果之前請保留原始檔案
依可見行進行去重雖然方便,但對商業記錄來說,通常不如以穩定的資料庫識別碼來去重。客戶名稱可能有兩種拼法,電子郵件可能夾帶多餘的空白,產品 SKU 在某次匯出中可能帶有前置零,在另一次匯出中則沒有。如果您的目標是從真實的資料集中刪除列,請先將比對欄位標準化為穩定的鍵,再依該鍵去重,並在從來源刪除任何資料之前,先確認保留下來的列符合預期。
一個實用的安全模式是預設讓去重動作是非破壞性的:將原始檔案另存成獨立檔案(或將清單以像 list-original.txt 這種清楚的名稱複製到瀏覽器工具中),在副本上執行去重,並且只有在對保留結果的開頭、中間和結尾進行過抽查之後,才覆寫工作中的檔案。MDN 文件中有關於 Set 資料結構的說明,瀏覽器工具就是依賴它來進行確定性的「我是否見過這個鍵」檢查,而這也是每個合理的去重程式都應該採用的相同模式。
如果您的下一步剛好與去重相反——加上引號、前綴或編號——那麼編輯器的路徑仍然在 Notepad++ 中。另一篇教學介紹了如何在不使用正則表達式的情況下為 Notepad++ 中的每一行加上引號,這是在去重一組識別碼、標籤或 SQL 值之後常見的配套工作。
若想進一步了解,請參閱在 Excel 儲存格中移除重複的單字。