Як зробити багаторядковий пошук менше?


18

В less, ви можете шукати , використовуючи /для шаблону , який містить повернення каретки і переведення рядка? Я знаю, що ваш візерунок може закінчуватися рядком із використанням $Як я включати нові рядки до пошуку менше? ), Але мені потрібен шаблон, щоб відповідати тексту, який охоплює кілька рядків.

Я спробував \n, але це лише шукає nперсонажа.


Ви пробували \n+для 1 або більше нових рядків?
Брок Хенслі

Який дистрибутив Linux, і чи визначили ви змінну середовища "менше"?
harrymc

@harrymc Як це могло б допомогти у пошуках багаторядкових запитів?
sashoalm

Збір інформації.
harrymc

2
Це неможливо на основі огляду вихідного коду для less( search.c:search_range()). Операція пошуку / співпадіння виконується на одній лінії з обмеженою лінією за один раз, тому ви не можете відповідати межі рядка. Дивіться line.c:forw_raw_line()про реалізацію "readline", як закликав search_range.
zackse

Відповіді:


7

Неможливо співставити межі ліній, тому що функція пошуку в lessфункціонує на одній окремій рядку, що розмежовується за один раз. Це справа незалежно від впровадження системних регулярних виразів (GNU, POSIX, PCRE тощо).

Зауважте, що я не зміг знайти офіційне сховище джерел для розробки основної лінії less, але для огляду коду тут посилання, що випливають, є із дерева вкладів FreeBSD.

Див. Search.c: search_range () для здійснення пошукової операції. Цикл у ньому викликає line.c: forw_raw_line () для отримання наступного блоку вмісту, обмеженого новим рядком . Цей блок передається в match.c: match_pattern (), де виконується шаблон пошуку (регулярний вираз).

Для відповідності декількох рядків вам потрібно буде використовувати інший інструмент. Один із варіантів - зайти у свій редактор і використовувати його можливості пошуку, як пропонують інші. Ви можете викликати редактор, натиснувши vна less.


2

Не знаєте, як це зробити less, але ви можете виконати те саме в vim.

http://vim.wikia.com/wiki/Search_across_multiple_lines

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

Атом \\_. знаходить будь-який символ, включаючи кінцеву лінію. Багатоканальні \\{-}матчі якомога.


1
Однак це не відповідає на питання, оскільки мова йде про менше, а не про vim. Це має бути коментар.
sashoalm

1
@sashoalm Це все ще спроба відповісти, тому я би проголосував за неї і продовжував рухатися далі. Люди, які шукають рішення, можуть не зобов’язані спеціально використовувати один інструмент.
slhck

2

less використовує ed синтаксис регулярного вираження, і він, на жаль, не підтримує багаторівневу відповідність

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

Я сподівався це також знайти, або принаймні знайти, чи використовується цей біт синтаксису в less:

RE_DOT_NEWLINE Якщо цей біт встановлений, то оператор матчу-будь-якого символу відповідає новому рядку; якщо цей біт не встановлений, він не робить.

Тож я можу використовувати .+шаблон для узгодження нових рядків. Але ні, це не так.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.