Xóa các hàng trùng lặp trong Notepad ++


595

Có thể xóa các hàng trùng lặp trong Notepad ++, chỉ để lại một lần xuất hiện của một dòng không?

Câu trả lời:


760

Notepad ++ có thể làm điều này, miễn là bạn muốn sắp xếp theo dòng và xóa các dòng trùng lặp cùng một lúc.

Bạn sẽ cần plugin TextFX. Điều này từng được bao gồm trong các phiên bản cũ hơn của Notepad ++, nhưng nếu bạn có phiên bản mới hơn, bạn có thể thêm nó từ menu bằng cách đi tới Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install. Trong một số trường hợp nó cũng có thể được gọi TextFX Characters, nhưng đây là điều tương tự

Các hộp kiểm và nút yêu cầu sẽ xuất hiện trong menu bên dưới : TextFX -> TextFX Tools.

Đảm bảo rằng "sắp xếp đầu ra duy nhất ..." được chọn. Tiếp theo, chọn một khối văn bản ( Ctrl+ Ađể chọn toàn bộ tài liệu). Cuối cùng, nhấp vào "sắp xếp dòng phân biệt chữ hoa chữ thường" hoặc "phân loại chữ hoa chữ thường"

bố trí menu trong n ++


32
Plugin cực kỳ mạnh mẽ, mặc dù "tuổi" của nó. Hy vọng họ KHÔNG BAO GIỜ xóa cái đó khỏi ưu đãi plugin NPP tiêu chuẩn. Anh chàng nghĩ về tất cả các tính năng trong plugin này, là một loại "có tầm nhìn".
GeertVc

7
Mạnh hơn excel.
Vasu

6
Còn phiên bản Notepad ++ x64 thì sao? Plugin TextFX x64 phiên bản không tồn tại
Địa lý

15
TextFx không có trong phiên bản 64 bit.
Rhyous

4
@Geograph Và sẽ không có plugin 64 bit của TextFx xem ghi chú này . Do đó, sẽ rất tốt nếu biết có một plugin thay thế cung cấp loại bỏ và trùng lặp.
Robert

641

Vì Notepad ++ Phiên bản 6, bạn có thể sử dụng regex này trong tìm kiếm và thay thế đối thoại:

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

thay thế bằng không có gì . Điều này để lại từ tất cả các hàng trùng lặp lần xuất hiện cuối cùng trong tệp.

Không cần sắp xếp cho điều đó và các hàng trùng lặp có thể ở bất cứ đâu trong tệp!

Bạn cần kiểm tra các tùy chọn "Biểu thức chính quy" và ". Phù hợp với dòng mới":

Notepad ++ Thay thế đối thoại

  • ^ phù hợp với sự bắt đầu của dòng.

  • (.*?)khớp với bất kỳ ký tự nào 0 lần trở lên, nhưng càng ít càng tốt (Nó khớp chính xác trên hàng, điều này là cần thiết vì tùy chọn ". khớp với dòng mới"). Hàng phù hợp được lưu trữ, vì các dấu ngoặc xung quanh và có thể truy cập bằng cách sử dụng\1

  • $ phù hợp với cuối dòng.

  • \s+?^ phần này khớp với tất cả các ký tự khoảng trắng (dòng mới!) cho đến khi bắt đầu hàng tiếp theo ==> Điều này sẽ loại bỏ dòng mới sau hàng phù hợp, để không có hàng trống nào sau khi thay thế.

  • (?=.*^\1$)đây là một khẳng định nhìn tích cực. Đây là phần quan trọng trong regex này, một hàng chỉ được khớp (và loại bỏ), khi có chính xác cùng một hàng theo sau một nơi khác trong tệp.


10
oh, cái này là rực rỡ, nó thậm chí xóa hàng trống rỗng, tôi macroing nó lúc này rất :)
Aprillion

66
Nó chỉ loại bỏ TẤT CẢ các dòng trong một tệp trong một số trường hợp.
SerG

3
Có cách nào để loại bỏ sự xuất hiện LAST không? Điều này phù hợp với tất cả trừ người cuối cùng ...
Cullub

28
Trong trường hợp của tôi, giải pháp này đã loại bỏ tất cả các dòng, bỏ chọn phần . matches newlineđã làm.
Kuitsi

3
@SerG Trong một số trường hợp, nó cũng không hoạt động với tôi, nhưng khi tôi xóa "khớp với dòng mới" thì nó đã làm :)
Davidenko

95

Nếu các hàng ngay sau nhau thì bạn có thể sử dụng thay thế regex:

Mẫu tìm kiếm: ^(.*\r?\n)(\1)+

Thay thế bằng: \1


1
Có thể những người khác đã gặp may mắn với điều này, nhưng đối với tôi ^ (. * \ N) \ 1 kết quả trong "Không thể tìm thấy văn bản"
b1nary.atr0phy

4
@ b1naryatr0phy đảm bảo bạn đã đặt "Chế độ tìm kiếm" thành "Biểu thức chính quy", tôi cũng đã cập nhật mẫu để nó có thể xử lý các kết thúc dòng kiểu cửa sổ
Grant Peters

3
notepad ++ có công cụ regex nhẹ, nó không cho phép các chức năng nâng cao, thậm chí không phải là "? hoặc \ r \ n" vì nó chỉ hoạt động trên một dòng duy nhất và bạn sử dụng $ cho các ký tự \ r \ n
Stefan Rogin

3
Điều này loại bỏ từng cái một. Bạn phải lặp lại nhiều lần. Tôi tự hỏi tại sao \ n + -> \ n không hoạt động (nghĩ rằng nó báo cáo nhiều thay thế)
Val

2
@Val, nếu bạn tạo phần tham chiếu ngược của trận đấu một nhóm có yêu cầu khớp 1 hoặc nhiều hơn, mẫu sẽ khớp với N dòng trùng lặp liền kề tại một thời điểm:^(.*\r?\n)(\1)+
Kenigmatic

37

Notepad ++

-> Thay thế cửa sổ

Đảm bảo rằng trong chế độ Tìm kiếm, bạn đã chọn nút radio Biểu thức chính quy

Tìm cái gì:

^ (. *) (\ R? \ N \ 1) + $

Thay thế bằng:

$ 1

Trước:

và chúng tôi nghĩ rằng có

và chúng tôi nghĩ rằng có

dòng đơn

Có thể

Có thể

Sau:

và chúng tôi nghĩ rằng có

dòng đơn

Có thể


2
Không phải là tập tin cần thiết để được sắp xếp để làm việc này sao?
Peter Mortensen

thật tuyệt vời
Remo Liechti

30

Nếu bạn không quan tâm đến thứ tự hàng (mà tôi không nghĩ là bạn làm), thì bạn có thể sử dụng hộp Linux / FreeBSD / Mac OS X / Cygwin và làm:

$ cat yourfile | sort | uniq > yourfile_nodups

Sau đó mở lại tệp trong Notepad ++.


3
Không hoạt động trên Windows 7.'cat' is not recognized as an internal or external command, operable program or batch file.
Iain Samuel McLean Elder

2
@Iain Elder: cat là một tiện ích Unix tiêu chuẩn, đó là lý do tại sao câu trả lời này chỉ định rằng nó hoạt động trên linux, FreeBSD và MacOSX. Câu trả lời cũng gợi ý Cygwyn: Đây là một chương trình windows cung cấp cho bạn một kiểu vỏ unix, và với nó, con mèo. Câu chuyện dài (quá muộn!): Win 7 cần Cygwin để làm điều này.
Travis Clark

11
Trong cửa sổ, bạn có quyền hạn:cat yourfile | sort -Unique
Elazar

9
Đây là những ví dụ điển hình về "việc sử dụng mèo vô cớ". Hãy quên tiện ích con mèo đi và chỉ sử dụng chuyển hướng tập tin: sort <yourfile | uniq> yourfile_nodups
scott8035

1
@ scott8035, tôi đồng ý rằng mèo không có ích để chạy lệnh đó, nhưng tôi thấy việc bắt đầu với mèo thường rất hữu ích khi tìm ra một chuỗi dài các lệnh không rõ ràng, như tệp mèo | quyến rũ ... | quyến rũ ... | sed ... vân vân. Vì vậy, tôi muốn nói rằng có thể có lý do để sử dụng mèo. Tất nhiên con mèo có thể được gỡ bỏ vào cuối, nhưng một số quá lười biếng cho điều đó.
FORTRAN

17

Các phiên bản sau của Notepad ++ rõ ràng không bao gồm plugin TextFX. Để sử dụng plugin để sắp xếp / loại bỏ trùng lặp, plugin phải được tải xuống và cài đặt (tham gia nhiều hơn) hoặc được thêm bằng trình quản lý plugin.

A) Cách dễ dàng (như được mô tả ở đây ).

Plugin -> Trình quản lý plugin -> Hiển thị Trình quản lý plugin -> tab khả dụng -> Ký tự TextFX -> Cài đặt

B) Cách liên quan nhiều hơn, nếu cần một phiên bản khác hoặc cách dễ dàng không hoạt động.

  1. Tải xuống plugin từ SourceForge:

    http://doads.sourceforge.net/project/npp-plugins/TextFX/TextFX%20v0.26/TextFX.v0.26.unicode.bin.zip

  2. Mở tệp zip và giải nén NppTextFX.dll

  3. Đặt NppTextFX.dll trong thư mục plugin của Notepad ++, chẳng hạn như:
    C: \ Chương trình tập tin \ Notepad ++ \ plugin

  4. Bắt đầu Notepad ++ và TextFX sẽ là một trong những mục trình đơn tệp (như được thấy trong Câu trả lời số 1 ở trên của Colin Pickard)

Sau khi cài đặt plugin TextFX, hãy làm theo các hướng dẫn trong Câu trả lời số 1 để sắp xếp và loại bỏ các bản sao.

Ngoài ra, hãy xem xét việc thiết lập một phím tắt bằng cách sử dụng Cài đặt> ánh xạ cắt nếu bạn sử dụng lệnh này thường xuyên hoặc muốn sao chép một phím tắt, chẳng hạn như F9 trong TextPad để sắp xếp.


Trong notepad ++ 7.6, nên thêm trình cắm vào C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX. Khác hơn là điều này vẫn hoạt động tốt.
P_W999

14

Trong phiên bản 7.8, bạn có thể thực hiện việc này mà không cần bất kỳ plugin nào - Chỉnh sửa -> Hoạt động dòng -> Xóa các dòng trùng lặp liên tiếp. Bạn sẽ phải sắp xếp tệp để đặt các dòng trùng lặp theo thứ tự liên tiếp trước khi nó hoạt động, nhưng nó hoạt động như một bùa mê.

Tùy chọn sắp xếp có sẵn trong Chỉnh sửa -> Hoạt động trực tuyến -> Sắp xếp theo ...


7

Bạn có thể cần một plugin để làm điều này. Bạn có thể thử dòng lệnh cc.ddl(xóa các dòng trùng lặp) của ConyEdit . Nó là một plugin biên tập chéo cho các trình soạn thảo văn bản, bao gồm Notepad ++.

Với ConyEdit đang chạy trong nền, hãy làm theo các bước dưới đây:

  1. nhập dòng lệnh cc.ddlở cuối văn bản.
  2. sao chép văn bản và dòng lệnh.
  3. dán, sau đó bạn sẽ thấy những gì bạn muốn.

Thí dụ
nhập mô tả hình ảnh ở đây


5

Tìm kiếm biểu thức chính quy: \b(\w+)\b([\w\W]*)\b\1\b

Thay thế bằng: $1$2

Nhấn nút Thay thế cho đến khi không còn kết quả trùng khớp cho biểu thức chính quy trong tệp của bạn.


Tạo một tệp thử nghiệm để thử điều này, nhưng biểu thức thông thường không hoạt động đáng tin cậy để hoàn thành công việc.
RockPaperLizard

Bạn có thể vui lòng cung cấp một ví dụ thất bại để tôi có thể cải thiện câu trả lời của mình không?
Hesham Eraqi

4

Không ai làm việc cho tôi.

Một giải pháp là:

Thay thế

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

với

\1

Tạo một tệp thử nghiệm để thử điều này, nhưng biểu thức thông thường không hoạt động đáng tin cậy để hoàn thành công việc.
RockPaperLizard

Đối với tất cả dữ liệu của tôi, nó hoạt động tốt. Tôi quên mất giải pháp của mình là gì. Thêm chi tiết khi thất bại để người khác có thể cải thiện regex này.
Manohar Reddy Poreddy 20/03/2016

Tôi đã tạo một tệp để mỗi dòng có một số nguyên trong khoảng 0-999 trên đó, theo thứ tự ngẫu nhiên, đôi khi có các bản sao. Nó đã không loại bỏ hầu hết các bản sao và không xóa bất kỳ bản sao nào không có tuần tự.
RockPaperLizard

1
Vui lòng cung cấp 2 ví dụ để làm việc và không làm việc. Nó sẽ giúp ai đó.
Manohar Reddy Poreddy 20/03/2016

1
Tại sao ^(.*)\s+(\r?\n\1\s+)+$và không ^(.*)\s*(\r?\n\1\s*)+$?
Đánh dấu

2

Trình quản lý plugin hiện không khả dụng (không đi kèm với bản phân phối) cho Notepad ++. Bạn phải cài đặt thủ công ( https://github.com/bruderstein/nppPluginManager/release ) và ngay cả khi bạn làm như vậy, rất nhiều plugin không còn khả dụng nữa (không có TextFX).

Có thể có một plugin khác chứa các chức năng cần thiết. Ngoài ra, cách duy nhất để làm điều đó trong Notepad ++ là sử dụng một số đặc biệt regex cho phù hợp và sau đó thay thế ( Ctrl+ FThay tab).

Mặc dù có nhiều chức năng có sẵn thông qua mục menu Chỉnh sửa (cắt xén, xóa các dòng trống, sắp xếp, chuyển đổi EOL), không có thao tác "duy nhất" nào khả dụng.

Nếu bạn có Windows 10 thì bạn có thể kích hoạt Bash (chỉ cần nhập Ubuntu vào Microsoft Store và làm theo hướng dẫn trong phần mô tả để cài đặt nó) và sử dụng cat your_file.txt | sort | uniq > your_file_edited.txt. Tất nhiên, bạn phải ở trong cùng thư mục làm việc với "your_file.txt" hoặc tham chiếu đến nó thông qua đường dẫn của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.