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

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

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

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

答案1

无法跨行匹配,因为 中的搜索功能less每次只对一个换行符分隔的行进行操作。无论系统正则表达式实现是什么(GNU、POSIX、PCRE 等),情况都是如此。

请注意,我找不到 less,但出于此处代码审查的目的,以下链接来自 FreeBSD 贡献树。

搜索.c:搜索范围()用于执行搜索操作。其中的循环调用线.c:forw_raw_line()检索下一个以换行符分隔的内容块。该块将传递给匹配.c:match_pattern()执行搜索模式(正则表达式)的位置。

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

答案2

不确定如何在中做到这一点less,但您可以在中完成相同的操作vim

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

/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 如果设置了此位,则匹配任意字符运算符将匹配换行符;如果未设置此位,则不会。

所以我可以使用.+模式来匹配换行符。但是,事实并非如此。

相关内容