Regex: Loại bỏ các dòng có chứa Trợ giúp trực tuyến, v.v.


371

Tôi có một tài liệu dài về các lệnh. Sử dụng Notepad ++ hoặc regex, tôi muốn xóa tất cả các dòng có chứa "trợ giúp" bao gồm cả keyboard_help, v.v.

Điều này có thể giải quyết như thế nào?

Câu trả lời:


945

Điều này cũng có thể với Notepad ++:

  • Chuyển đến menu tìm kiếm, Ctrl+ Fvà mở tab Đánh dấu .
  • Kiểm tra dòng Bookmark (nếu không có cập nhật tab Mark cho phiên bản hiện tại).

  • Nhập cụm từ tìm kiếm của bạn và nhấp Đánh dấu tất cả

    • Tất cả các dòng có chứa thuật ngữ tìm kiếm được đánh dấu.
  • Bây giờ hãy vào menu Tìm kiếmBookmarkXóa các dòng được đánh dấu

  • Làm xong.


36
Vâng! Nó cũng có 'Xóa các dòng không được đánh dấu', giống như grep, chính xác là những gì tôi cần!
Chloe

6
Cảm ơn, đây là một mẹo gọn gàng. Tôi thà hoàn thành nó bằng một vài cú nhấp chuột đơn giản hơn là kích hoạt bảng điều khiển Unix (bỏ qua rằng tôi chủ yếu là trên Windows), cdvào đường dẫn và nhập một lệnh phức tạp (lo lắng về cú pháp và về việc vặn vít vĩnh viễn sau đó nhận ra không có bản sao lưu). [ Đừng hiểu sai ý tôi, tôi luôn sử dụng các lệnh console cho những thứ khác, nhưng đối với những thứ như thế này, nó chỉ là một sự quá mức.]
ADTC

2
Chỉ giúp tôi tiết kiệm rất nhiều thời gian :-)
Brlja

3
kiểm tra BOOKMARK LINElà quan trọng ở đây nếu không nó sẽ không hoạt động!.
HaSeeB MiR

1
@AndrewSchultz, xin lỗi, nhưng không.
stema

187

Một cách khác để làm điều này trong Notepad ++ là tất cả trong hộp thoại Tìm / Thay thế và với regex:

  • Ctrl+ hđể hiển thị hộp thoại tìm thay thế.

  • Trong Find what:hộp văn bản bao gồm regex của bạn: .*help.*\r?\n(trong đó \rtùy chọn trong trường hợp tệp không có kết thúc dòng Windows).

  • Để Replace with:trống hộp văn bản.

  • Đảm bảo nút radio Biểu thức chính quy trong khu vực Chế độ tìm kiếm được chọn. Sau đó nhấp Replace Allvà voila! Tất cả các dòng có chứa thuật ngữ tìm kiếm của bạn helpđã bị xóa.

Cách thay thế dòng trong N ++


17
câu trả lời tốt hơn so với sử dụng tab đánh dấu, vì điều này có thể được thực hiện cho "Tìm trong tệp"
Alex

2
Đảm bảo thoát các ký tự đặc biệt như dấu ngoặc đơn với dấu gạch chéo ngược.
Noumenon

4
đảm bảo bỏ chọn ". phù hợp với dòng mới"
MagTun

1
Câu trả lời tốt hơn do hiệu suất cao hơn. Với các tệp> 1 millions, phương thức đánh dấu được kéo dài đến mức tối đa, cũng trên các máy hiện đại.
Roland Ettinger

17

Nhiệm vụ dễ dàng với grep:

grep -v help filename

Nối > newFileNameđể chuyển hướng đầu ra sang một tệp mới.


Cập nhật

Để làm rõ nó, hành vi bình thường sẽ được in các dòng trên màn hình. Để dẫn nó đến một tập tin, >có thể được sử dụng. Vì vậy, trong lệnh này:

grep -v help filename > newFileName
  1. grepgọi grepchương trình, rõ ràng
  2. -vlà một cờ để đảo ngược đầu ra. Bằng cách khử, grepin các dòng khớp với mẫu đã cho. Với cờ này, nó sẽ in các dòng không khớp với mẫu.
  3. help là mô hình phù hợp
  4. filename là tên của tệp đầu vào
  5. > chuyển hướng đầu ra cho mục sau
  6. newFileName tập tin mới nơi đầu ra sẽ được lưu.

Như bạn có thể nhận thấy, bạn sẽ không xóa những thứ trong tệp của mình. grepsẽ đọc nó và một tập tin khác sẽ được lưu, sửa đổi cho phù hợp.


@Kevin Duke: Than ôi! Điều đó có nghĩa là bạn chưa grepcài đặt. Dù sao, tôi khuyên bạn nên cài đặt GNU grep, nó chắc chắn sẽ hoạt động trên Windows và đây là một công cụ thực sự hữu ích.
sidyll

@sidyll Nó biết grep là gì và nó đã tạo ra một loạt đầu ra, điều đó có thể là do tôi không chỉ định một tệp đầu ra
chanh

2
@Kevin Duke: như tôi đã nói trước đó trong câu trả lời, đầu ra có thể được chuyển hướng. Các hành vi tiêu chuẩn được in trên màn hình. Để chuyển hướng, bạn sử dụng một đường ống ( >trong trường hợp này), đưa ra lệnh cuối cùng làgrep -v help filename > outputFileName
sidyll

Cảm ơn, tôi chắc chắn sẽ thử điều này!
chanh

grep> sed bất kỳ ngày nào trong tuần để TÌM chuỗi các nhân vật
kwikness

13

Bạn có thể làm điều này bằng cách sử dụng sed: sed '/help/ d' < inputFile > outputFile


4
@CengizFrostclaw: Tại dòng lệnh trên Linux / Mac / Sao cũng được. Nếu bạn đang ở trên Windows, bạn sẽ phải cài đặt một cái gì đó như CygWin và sử dụng nó.
Tikhon Jelvis

Cảm ơn @TikhonJelvis! Và một câu hỏi cuối cùng, chúng ta có thể thực hiện sed 'help /' để xóa tất cả các dòng bắt đầu (không chứa) với sự giúp đỡ không?
jeff

3
@CengizFrostclaw: Tôi nghĩ sed '/^help/ d'nên làm việc. Các ^đại diện cho sự bắt đầu của dòng.
Tikhon Jelvis

@jeff PowerShell có sedgrep
Ooker

cygwin có thể không hoạt động trên windows với các tập tin utf-16. Các tiện ích Cygwin sử dụng UFT-8 theo mặc định. Rất ít trong số họ hỗ trợ UTF-16. Sử dụng babun babun.github.io . Nó hoạt động như một trình bao bọc xung quanh cygwin, nhưng cung cấp rất nhiều thứ bên ngoài hộp.
Sahil Singh

9

Tìm kiếm với một biểu thức thông thường:

^.*(help).*$

2
Còn phần xóa thì sao?
Peter Mortensen

1
@PeterMortensen Tìm \n\n, thay thế bằng `` (không có gì)
Leo

6

Nếu bạn đang dùng Windows , hãy thử findstr. Không cần các công cụ của bên thứ ba:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

Nó cũng hỗ trợ regex! Chỉ cần đọc trợ giúp của công cụ findstr /?.

PS Nếu bạn muốn làm việc với các tệp lớn, lớn (như tệp nhật ký 400 MB), trình soạn thảo văn bản không hiệu quả về bộ nhớ, vì vậy, như ai đó đã chỉ ra, các công cụ dòng lệnh là cách để sử dụng. Nhưng không có grep trên Windows, vì vậy ...

Tôi vừa chạy tệp này trên tệp nhật ký 1 GB và mất đúng 3 giây.

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.