如何在less中进行多行搜索?

yon*_*ran 22 gnu less

在 中less,您能否使用/包含回车符和换行符的模式进行搜索?我知道您的模式可以使用一行结束$(来自How do I include newlines in a search in less?),但我需要该模式来匹配跨越多行的文本。

我试过\n,但只搜索n字符。

小智 8

不确定如何在 中执行此操作less,但您可以在 中完成相同的操作vim

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

/PATTERN1\\_.\\{-}PATTERN2
Run Code Online (Sandbox Code Playgroud)

原子\\_.查找包括行尾在内的任何字符。多重\\{-}匹配尽可能少。

  • 然而,这并没有回答问题,因为它是关于 less 的,而不是关于 vim 的。应该是一个评论。 (3认同)
  • @sashoalm 这仍然是一个尝试回答的问题,所以我会投票否决,然后继续。寻找解决方案的人们可能不必专门使用一种工具。 (2认同)

zac*_*kse 8

不可能跨越行边界进行匹配,因为搜索功能 in 一次less在单个换行符分隔的行上运行。无论系统正则表达式实现如何(GNU、POSIX、PCRE 等),情况都是如此。

请注意,我找不到用于主线开发的官方源代码库 less,但出于代码审查的目的,下面的链接来自 FreeBSD 贡献树。

有关搜索操作的实现,请参见search.c:search_range()。其中的循环调用line.c:forw_raw_line()来检索下一个以换行符分隔的内容块。该块被传递到match.c:match_pattern()执行搜索模式(正则表达式)。

要跨多行匹配,您需要使用不同的工具。一种选择是进入您的编辑器并按照其他人的建议使用其搜索功能。您可以通过按vin来调用编辑器less