17

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

Я пытался \n , но он ищет только символ n .

3 ответа3

6

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

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

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

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

2

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

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

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

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

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

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .