Câu hỏi Xóa tất cả các dòng trong Notepad ++ trừ các dòng chứa từ tôi cần?


Tôi có một tệp văn bản và muốn giữ các dòng bắt đầu bằng <Path>và xóa tất cả các dòng khác.

Tôi làm nó như thế nào?


174
2018-05-29 15:05


gốc


Liên quan: stackoverflow.com/questions/8264391/… - Cees Timmerman
Plugin LineFilter2 cũng dễ sử dụng. - Karsten


Các câu trả lời:


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 Trình đơn tìm kiếm> Tìm ...> Chọn "Đánh dấu" Tab. Kích hoạt cụm từ thông dụng. Tìm kiếm ^<Path> (^ là để bắt đầu dòng). Đừng quên kiểm tra "Bookmark lines" và bấm "Mark All"

    ==> Tất cả các Hàng bạn muốn tiếp tục nhận được Dấu trang

  2. Đi tới Menu "Tìm kiếm - Dấu trang - Dấu trang ngược"

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

  3. Đi tới Trình đơn "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.


251
2018-06-03 20:23



+1. Nice, 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 chưa đượ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
Lúc đầu tôi gặp khó khăn vì phiên bản (6.2.3) của Notepad ++ không có một mục menu có tên là "Mark Tab". Thay vào đó, bạn phải đi đến "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 dấu trang nữa. Notepad ++ hiện có "Hủy bỏ các dòng chưa được đánh dấu". Nhưng mẹo của bạn đã giúp tôi rất nhiều! Cảm ơn! - Adam
Bạn có thể bỏ qua bước 2, bởi vì nó (ít nhất là từ v6.4.5) có thể chọn "Hủy bỏ các dòng chưa được đánh dấu". - Nailuj
Tôi đang sử dụng Notepad ++ quá lâu và tôi chưa bao giờ biết 'Dấu trang' trước đây là gì. Tuyệt vời như thế nào là công cụ mạnh mẽ và làm thế nào ít tôi biết về nó. - Danubian Sailor
Bạn là một genious. đâ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 cho thực tế. - Marcello Grechi Lins


Điều này thực sự có thể được thực hiện theo hai bước từ 6.3. Tôi nghĩ rằng nó có thể được thực hiện sớm hơn so với khi 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à xóa các dòng chưa được đánh dấu. Làm xong. Hướng dẫn chi tiết theo.

  1. Tìm kiếm menu "Tìm". Trong hộp thoại Tìm, nhấp vào tab "Đánh dấu". Kích hoạt cụm từ thông dụng. Tìm kiếm ^ (^ là để bắt đầu dòng). Đừng quên kiểm tra "Bookmark lines" và bấm "Mark All"

    ==> Tất cả các Hàng bạn muốn tiếp tục nhận được Dấu trang

  2. Trình đơn tìm kiếm -> Dấu trang -> Xóa các dòng chưa được đánh dấu.

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


57
2018-02-27 16:03



Điều này đã cho tôi 10 giây trong khi các giải pháp khác đã cho tôi> 20 giây. Cám ơn! - Black


Giải pháp chỉ làm sạch regex

Biến thể hai bước

  1. regex thay thế

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

    thay thế kiểm tra bằng văn bản bạn yêu cầu

  2. thay thế

    [\r\n]{2,}
    

    với \r\n

Biến thể bước đơn

Sử dụng ^(?!<Path>).*\r\n để thay thế các kết quả phù hợp bằng chuỗi rỗng. Phiên bản tổng quát sẽ là ^(?!.*?test).*\r\n. Thao tác này sẽ không xóa dòng trống ở cuối tệp. Tất cả các dòng khác bị xóa, 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 xảy ra nhiều hơn 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 gây rối với điều này. thứ hai là thay thế nó bằng một dòng trả về.


25
2017-07-08 16:51



Lưu ý cho các dân tộc: Đôi khi regex với kết thúc dòng (EOL) "không hoạt động". Các \r\n EOL được đề cập trong bài đăng 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ì trên môi trường Linux, nó chỉ \nhoặc trong môi trường Mac \r, vì vậy nếu bạn kéo một tập tin từ một trong hai, nó sẽ không được Windows phong cách EOL. Tuy nhiên, nếu bạn tải xuống thông qua trình kích hoạt chế độ FileZilla và ASCII, nó có thể thay đổi chúng trở lại Windows EOL (như \n vào \r\n). Vì vậy, nếu regex không hoạt động, hãy kiểm tra phong cách EOL bằng cách vào "View> Show Symbols> Show End Of Line". CR = \r. LF = \n. - dhaupin


Dường như với tôi rằng 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 có 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.


5
2017-12-17 11:43



Bạn phải xóa 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


Chuyển đến menu Tìm kiếm -> Tìm thấy... -> Kích hoạt cụm từ thông dụng. Tìm kiếm "^Con đường"(^ 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, hãy truy cập: menu Tìm kiếm -> Thay thế... -> Kích hoạt cụm từ thông dụng.

Trong trường "Tìm gì:", hãy 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ả".


4
2018-06-21 16:36





Cung cấp mà 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ó làm việc với Strawberry Perl trên Windows, do đó điều chỉnh cho phù hợp nếu kết quả không phải là những gì bạn mong đợi.


3
2018-05-30 01:02





Đó là vụng về, nhưng sao chép tất cả Excelvà sau đó sử dụng =IF(LEFT(A1,6)="<Path>",A1,"") và sao chép công thức đó xuống hết cỡ. Sau đó sao chép lại vào Notepad ++. Nó không phải là 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.).


3
2018-05-29 18:07



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


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 phải tải xuống một chương trình vào máy tính của bạn hoặc kịch bản 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. Các tiện ích sed là một 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.htm). 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 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 một tập tin mới. Lý do cho điều này là bạn có thể 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 Expression cơ bản (xem tham chiếu tại http://www.regular-expressions.info/reference.html). Nếu là một cái gì đó giống như một đường dẫn * nix (/ var / www) thì bạn sẽ cần phải thoát khỏi ký tự / / regex của bạn để làm việc.

Thí 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 đệ trình để thoát khỏi ký tự /, thì lệnh sẽ đưa ra một lỗi. Bạn có thể thoát khỏi một ký tự đặc biệt (chẳng hạn như /) với ký tự dấu chéo ngược \.


2
2018-05-30 03:00





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


0
2018-05-29 15:16