Làm thế nào để thực hiện tìm kiếm nhiều dòng trong ít?


18

Trong less, bạn có thể tìm kiếm bằng cách sử dụng /một mẫu có chứa lợi nhuận vận chuyển và dòng mới không? Tôi biết mẫu của bạn có thể kết thúc bằng một dòng bằng cách sử dụng $(từ Làm cách nào để tôi đưa dòng mới vào tìm kiếm trong ít hơn? ), Nhưng tôi cần mẫu phù hợp với văn bản kéo dài nhiều dòng.

Tôi đã thử \n, nhưng điều đó chỉ tìm kiếm nnhân vật.


Bạn đã thử \n+cho 1 hoặc nhiều dòng mới?
Brock Hensley

Phân phối Linux nào và bạn có xác định biến môi trường "LESS" không?
harrymc

@harrymc Điều đó sẽ giúp như thế nào với tìm kiếm đa dòng?
sashoalm

Thu thập thông tin.
harrymc

2
Điều này là không thể, dựa trên đánh giá về mã nguồn cho less( search.c:search_range()). Hoạt động tìm kiếm / kết hợp được thực hiện trên một dòng được phân tách bằng dòng mới tại một thời điểm, do đó bạn không thể khớp với các ranh giới của dòng. Xem line.c:forw_raw_line()để thực hiện "readline" như được gọi bởi search_range.
zackse

Câu trả lời:


7

Không thể phù hợp với các ranh giới của dòng, bởi vì chức năng tìm kiếm lesshoạt động trên một dòng được phân định bằng dòng mới tại một thời điểm. Đây là trường hợp bất kể triển khai regex hệ thống (GNU, POSIX, PCRE, v.v.).

Xin lưu ý rằng tôi không thể tìm thấy kho lưu trữ nguồn chính thức để phát triển dòng chính less, nhưng với mục đích xem xét mã ở đây, các liên kết tiếp theo là từ cây đóng góp FreeBSD.

Xem search.c: search_range () để thực hiện thao tác tìm kiếm. Vòng lặp trong đó gọi line.c: forw_raw_line () để truy xuất khối nội dung được phân tách bằng dòng mới tiếp theo. Khối đó được truyền cho match.c: match_potype () trong đó mẫu tìm kiếm (biểu thức chính quy) được thực thi.

Để khớp trên nhiều dòng, bạn sẽ cần sử dụng một công cụ khác. Một tùy chọn là thả vào trình chỉnh sửa của bạn và sử dụng các khả năng tìm kiếm của nó theo đề xuất của người khác. Bạn có thể gọi trình soạn thảo bằng cách nhấn vvào less.


2

Không chắc chắn làm thế nào để làm điều đó trong less, nhưng bạn có thể thực hiện tương tự trong vim.

http://vim.wikia.com/wiki/Search_across_mult Môn_lines

/PATTERN1\\_.\\{-}PATTERN2

Nguyên tử \\_.tìm thấy bất kỳ ký tự nào kể cả cuối dòng. Các \\{-}trận đấu càng ít càng tốt.


1
Điều này không trả lời câu hỏi, tuy nhiên, vì nó là về ít hơn, không phải là vim. Nó nên là một bình luận.
sashoalm

1
@sashoalm Vẫn là một nỗ lực để trả lời, vì vậy tôi bỏ phiếu xuống và tiếp tục. Những người tìm kiếm giải pháp có thể không bị ràng buộc sử dụng một công cụ cụ thể.
slhck

2

lessđang sử dụng edcú pháp regex và nó không hỗ trợ kết hợp nhiều dòng một cách đáng tiếc.

https://www.gnu.org/software/gnulib/manual/html_node/ed-THER-expression-syntax.html#ed-THER-expression-syntax

Tôi đã hy vọng tìm thấy điều đó là tốt, hoặc ít nhất là tìm thấy nếu bit cú pháp này được sử dụng trong less:

RE_DOT_NEWLINE Nếu bit này được đặt, thì toán tử khớp bất kỳ ký tự nào khớp với một dòng mới; nếu bit này không được đặt, thì nó không.

Vì vậy, tôi có thể sử dụng .+mô hình để phù hợp với dòng mới. Nhưng không, nó không.

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.