
В 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
синтаксис регулярных выражений и, к сожалению, не поддерживает многострочное сопоставление.
Я надеялся найти это или, по крайней мере, узнать, использовался ли этот фрагмент синтаксиса в less
:
RE_DOT_NEWLINE Если этот бит установлен, то оператор сопоставления любого символа соответствует символу новой строки; если этот бит не установлен, то этого не происходит.
Так что я могу использовать .+
шаблон для сопоставления новых строк. Но нет, он этого не делает.