Xóa tất cả các dòng trong Notepad ++ ngoại trừ các dòng có chứa một từ tôi cần?


Câu trả lời:


292

Có một cách dễ dàng để đạt được điều này. Bạn cần thực hiện 3 bước.

  1. Chuyển đến menu Tìm kiếm> Tìm ...> Chọn Tab "Đánh dấu". Kích hoạt các biểu thức thông thường. Tìm kiếm ^<Path>( ^là để bắt đầu dòng). Đừng quên kiểm tra "Dòng đánh dấu" và bấm "Đánh dấu tất cả"

    ==> Tất cả các hàng bạn muốn giữ một Bookmark

  2. Chuyển đến Menu "Tìm kiếm - Đánh dấu - Đánh dấu nghịch đảo"

    ==> Tất cả dòng bạn muốn xóa đều được đánh dấu.

  3. Chuyển đến Menu "Tìm kiếm - Đánh dấu - Xóa các dòng được đánh dấu"

    ==> Tất cả các dòng được đánh dấu sẽ bị xóa.


47
+1. Thật tuyệt, không biết về điều này. Ngoài ra còn có các tùy chọn để "Xóa các dòng không được đánh dấu" hoặc "Cắt / sao chép các dòng được đánh dấu" có thể tiết kiệm thời gian.
deizel

6
Lúc đầu tôi gặp rắc rối vì phiên bản (6.2.3) của Notepad ++ không có mục trình đơn có tên "Tab Tab". Thay vào đó, bạn phải vào "Tìm kiếm" -> "Tìm ..." -> nhấp vào tab "Đánh dấu". Và bạn không còn phải đảo ngược các dấu trang. Notepad ++ hiện có "Xóa các dòng không đánh dấu". Nhưng mẹo của bạn đã giúp tôi rất nhiều! Cảm ơn!
aakoch

22
Bạn có thể bỏ qua bước 2, bởi vì (ít nhất là từ v6.4.5) có thể chọn "Xóa các dòng không được đánh dấu".
Julian

4
Tôi đang sử dụng Notepad ++ rất lâu và tôi chưa bao giờ biết 'Dấu trang' trước đây là gì. Thật ngạc nhiên khi công cụ đó mạnh mẽ như thế nào và tôi biết rất ít về nó.
Thủy thủ Danubian

Bạn là một người tài giỏi. đây chỉ là một ví dụ gây sốc khác về cách tìm hiểu công cụ bạn sử dụng thực sự.
Marcello Grechi vào

67

Điều này thực sự có thể được thực hiện trong hai bước kể từ 6.3. Tôi nghĩ rằng nó có thể được thực hiện sớm hơn như tôi đã có 5,9 khi tôi lần đầu tiên thử nó.

Sử dụng bài viết của stema làm cơ sở của câu trả lời này. Có một bước ít hơn bây giờ. Đánh dấu các dòng và loại bỏ các dòng không đánh dấu. Làm xong. Hướng dẫn chi tiết làm theo.

  1. Menu tìm kiếm "Tìm". Trong hộp thoại Tìm, nhấp vào tab "Đánh dấu". Kích hoạt các biểu thức thông thường. Tìm kiếm ^<Path>( ^là để bắt đầu dòng). Đừng quên kiểm tra "Dòng đánh dấu" và bấm "Đánh dấu tất cả"

    ==> Tất cả các hàng bạn muốn giữ bây giờ đều có Bookmark

  2. Menu Tìm kiếm -> Bookmark -> Xóa các dòng không được đánh dấu.

    ==> Tất cả các dòng NON Bookmarked bị xóa.


3
Điều này khiến tôi mất 10 giây trong khi giải pháp khác đưa tôi> 20 giây. Cám ơn!
Đen

Tôi không cần thêm ^cụm từ tìm kiếm của mình, cũng không sử dụng biểu thức chính quy. Hy vọng điều này sẽ giúp được ai đó.
sa_leinad

29

Giải pháp regex sạch

Biến thể hai bước

  1. regex thay thế

    (?!^.*test.*$)^.+
    

    thay thế kiểm tra với văn bản yêu cầu của bạn

  2. thay thế

    [\r\n]{2,}
    

    với \r\n

Biến thể một bước

Sử dụng ^(?!<Path>).*\r\nđể thay thế các trận đấu với chuỗi trống. Phiên bản tổng quát sẽ là ^(?!.*?test).*\r\n. Điều này sẽ không xóa dòng trống ở cuối tập tin. Tất cả các dòng khác được loại bỏ, bao gồm nhiều dòng trống liên tiếp.

Giải trình:

  1. (?!)là một cái nhìn tiêu cực. ^.*test.*$ chọn toàn bộ dòng có chứa văn bản được yêu cầu.

  2. [\r\n]{2,}phù hợp với bất kỳ \r\nđiều gì xảy ra sau đó một khi đây là dòng Windows mới. nếu bạn có Linux hoặc hệ điều hành khác, bạn có thể cần phải xử lý vấn đề này. thứ hai là thay thế nó bằng một dòng trả về.


1
Lưu ý cho mọi người: Đôi khi regex với cuối dòng (EOL) "không hoạt động". Các \r\nEOL đề cập trong bài là những gì Windows sử dụng và do đó có thể hoặc không thể là những gì bạn đang tìm kiếm. Thông thường trên các môi trường Linux, nó chỉ \nhoặc trong các môi trường Mac \r, vì vậy nếu bạn lấy một tệp từ một trong hai, thì đó sẽ không phải là kiểu EOL của Windows. Tuy nhiên, nếu bạn tải xuống thông qua kích hoạt chế độ FileZilla và ASCII, nó có thể thay đổi chúng trở lại thành Windows EOL (như \nvào \r\n). Vì vậy, nếu regex không hoạt động, hãy kiểm tra kiểu EOL bằng cách đi tới "Xem> Hiển thị biểu tượng> Hiển thị kết thúc dòng". CR = \r. LF = \n.
dhaupin

5

Dường như với tôi, cách dễ nhất là chỉ sử dụng tính năng "Tìm tất cả trong tài liệu hiện tại" và sau đó sao chép kết quả vào một tệp mới hoặc chọn tất cả và thay thế trong tệp hiện tại.

Điều này sẽ tìm thấy tất cả các dòng chứa văn bản của bạn và liệt kê chúng ở phía dưới. Chỉ cần nhấp chuột phải vào kết quả tìm kiếm và sao chép / dán.


Bạn phải loại bỏ số dòng bằng cách thay thế \tLine [\d]*: . Vẫn là một câu trả lời tuyệt vời.
Noumenon

Điều này sẽ không hoạt động đối với các dòng quá rộng đến mức Notepad ++ cắt ngắn nó trong cửa sổ kết quả tìm kiếm.
MasterJoe2

4

Chuyển đến menu Tìm kiếm -> Tìm ... -> Kích hoạt biểu thức thông thường. Tìm kiếm "^ Path " (^ là để bắt đầu dòng).

Nhấp vào nút "Tìm tất cả trong Tài liệu hiện tại".

Cửa sổ "Tìm kết quả" sẽ xuất hiện với tất cả các dòng của mẫu. Chọn sao chép / dán chúng vào một tab mới trong Notepad ++.

Trong tab mới này, đã đến: menu Tìm kiếm -> Thay thế ... -> Kích hoạt các biểu thức thông thường.

Trong trường "Tìm gì:", sử dụng mẫu: "Dòng \ d +:". Để trống trường "Thay thế bằng:".

Nhấp vào nút "Thay thế tất cả".


3

Cung cấp rằng bạn thực sự muốn khớp <Path>và không phải là đường dẫn hệ thống tệp, bạn có thể thử điều này từ một dòng lệnh bằng Perl:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

Nó hoạt động với Strawberry Perl trên Windows, vì vậy hãy điều chỉnh cho phù hợp nếu kết quả không như bạn mong đợi.


3

Thật là vụng về, nhưng sao chép tất cả vào Excel , sau đó sử dụng =IF(LEFT(A1,6)="<Path>",A1,"")và sao chép công thức đó cho đến hết. Sau đó sao chép lại vào Notepad ++. Điều đó không lý tưởng, nhưng nó khá dễ dàng (nếu bạn có Excel). Cảnh báo: Nó sẽ không hoạt động tốt với các dòng thụt lề (Excel sẽ dịch chuyển các cột, v.v.).


Khi có một số cách để xử lý trực tiếp nhiệm vụ này, tại sao bạn muốn sao chép triệt để vào một ứng dụng khác, xử lý ở đó và chuyển trở lại?
Baldrickk

1

Không có cách nào dễ dàng để làm những gì bạn muốn với Notepad ++. Bạn sẽ cần tải chương trình xuống máy tính hoặc tập lệnh một cái gì đó trong VB (Tôi giả sử bạn đang ở trên Windows).

Bạn có thể làm những gì bạn muốn một trong hai cách với sed. Tiện ích sed được yêu thích trên * nix và có thể được tìm thấy cho Windows từ những người tuyệt vời tại GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htmlm ). Bạn sẽ tải xuống chương trình này, và sau đó chạy lệnh của bạn từ dấu nhắc lệnh.

Xóa tất cả các dòng không chứa:
sed -i '/^<PATH>/!d' file

In tất cả các dòng chứa sang một tệp mới:
sed -n '/^<PATH>/p' file > newfile

Tôi đề nghị bạn sử dụng in các dòng bạn muốn vào một tệp mới. Lý do cho điều này là có lẽ bạn sẽ không nhận được câu lệnh regex lần đầu tiên. Tiện ích sed sử dụng Cú pháp cơ bản biểu thức chính quy (xem tài liệu tham khảo tại http://www.THER-expressions.info/reference.html ). Nếu là một cái gì đó giống như đường dẫn * nix (/ var / www) thì bạn sẽ cần phải thoát / ký tự để biểu thức chính quy của bạn hoạt động.

Ví dụ: sed -n '/^\/var\/www/p' file > newfile
Điều này sẽ in ra tất cả các dòng bắt đầu bằng '/ var / www'. Nếu tôi nộp đơn để thoát / ký tự, thì lệnh sẽ bị lỗi. Bạn có thể thoát một ký tự đặc biệt (chẳng hạn như /) bằng ký tự dấu gạch chéo ngược \.


Đây có thể là một câu trả lời cũ nhưng vì nó thực sự không thể tin được có 2 phiếu (-1 bây giờ từ tôi) muốn bình luận về việc nó không chỉ sai như thế nào, mà còn nhắc lại trong một thao tác lệnh SINGLE cách tôi chỉ (một lần nữa) lấy một dòng> 100k đăng nhập tệp xuống 34 dòng chứa một từ (hoặc cụm từ) trong trường hợp này chỉ đơn giản là "lỗi" trong vòng 3 giây bằng cách đặt regex này trong TÌM KIẾM: ^ (?!. *? lỗi). * \ r \ n và để lại REPLACE VỚI trống, và KHÔNG chọn ". khớp với dòng mới" và nhấp vào "REPLACE ALL". Vâng, tôi cũng thích sed và awk nhưng nói NPP không thể làm điều này chỉ là sai.
Collin Chaffin

1

Giải pháp tốt hơn với regex thay thế:

(?!^.*SOMETEXT.*$)^.+\r?\n

Và thay thế bằng không có gì


1
Chào mừng bạn đến với Siêu người dùng! Muốn giải thích điều này cho những người có thể không biết mỗi bit của regex làm gì? :)
bertieb

0

Sử dụng Tìm kiếm-> Thay thế và nhập một biểu thức thông thường như ^[^ ].*và thay thế tất cả bằng một chuỗi trống bằng cách sử dụng Regular expression. Bước tiếp theo là tìm các dòng trống tìm kiếm \n\nthay thế bằng \ncách sử dụng Extendednhiều lần cho đến khi 0 occurrences were found.(sử dụng \r\n\r\n\r\ntùy thuộc vào định dạng tệp). Nếu bạn có rất nhiều dòng trống liên tiếp, thì sử dụng nhanh hơn \n\n\n\n\n\n\nhoặc thậm chí nhiều hơn \n: s trong chuỗi tìm kiếm.

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.