如何在更少的时间内进行多行搜索?


18

在中less,您可以使用/包含回车符和换行符的模式进行搜索吗?我知道您的模式可以使用结束于行$(来自如何在更少的搜索中包含换行符?),但是我需要该模式来匹配跨越多行的文本。

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


您是否尝试\n+过1条或更多条换行符?
Brock Hensley 2014年

哪个Linux发行版,您是否已定义环境变量“ LESS”?
harrymc

@harrymc对多行搜索有何帮助?
sashoalm 2015年

收集信息。
harrymc 2015年

2
根据lesssearch.c:search_range())的源代码,这是不可能的。搜索/匹配操作一次在一个换行符分隔的行上执行,因此您不能跨行匹配。请参阅line.c:forw_raw_line()以获取由调用的“ readline”的实现search_range
zackse 2015年

Answers:


7

跨行匹配是不可能的,因为in中的搜索功能一次只能less在一条换行符分隔的行上运行。不管系统正则表达式实现(GNU,POSIX,PCRE等)如何,都是这种情况。

请注意,我找不到用于的主线开发的官方源代码仓库 less,但是出于此处代码审查的目的,以下链接来自FreeBSD contrib树。

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

要跨多行匹配,您需要使用其他工具。一种选择是放入编辑器,并按照其他人的建议使用其搜索功能。您可以按调用编辑vless


2

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

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

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

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


1
但是,这并不能回答问题,因为它所涉及的内容较少,而不是vim。应该是一个评论。
sashoalm 2015年

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如果此位置1,则match-any-character运算符匹配换行符;如果未设置此位,则不会设置。

因此,我可以使用.+模式来匹配换行符。但是不,不是。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.