Как выполнить многострочный поиск в Less?

Как выполнить многострочный поиск в Less?

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

Я пробовал \n, но это только поиск символа n.

решение1

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

Обратите внимание, что мне не удалось найти официальный репозиторий исходного кода для основной разработки less, но для целей обзора кода нижеприведенные ссылки взяты из ветки FreeBSD contrib.

Видетьпоиск.c:search_range()для реализации операции поиска. Цикл в нем вызываетлиния.c:forw_raw_line()для извлечения следующего блока контента, разделенного новой строкой. Этот блок передаетсяmatch.c:match_pattern()где выполняется шаблон поиска (регулярное выражение).

Чтобы сопоставить несколько строк, вам нужно будет использовать другой инструмент. Один из вариантов — зайти в редактор и использовать его возможности поиска, как предлагают другие. Вы можете вызвать редактор, vнажав less.

решение2

Не уверен, как это сделать в less, но вы можете добиться того же самого в vim.

http://vim.wikia.com/wiki/Поиск_по_нескольким_строкам

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

Атом \\_.находит любой символ, включая конец строки. Мультисоответствует \\{-}как можно меньшему количеству.

решение3

lessиспользует edсинтаксис регулярных выражений и, к сожалению, не поддерживает многострочное сопоставление.

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

Я надеялся найти это или, по крайней мере, узнать, использовался ли этот фрагмент синтаксиса в less:

RE_DOT_NEWLINE Если этот бит установлен, то оператор сопоставления любого символа соответствует символу новой строки; если этот бит не установлен, то этого не происходит.

Так что я могу использовать .+шаблон для сопоставления новых строк. Но нет, он этого не делает.

Связанный контент