在 中less
,您可以使用 搜索/包含回车符和换行符的模式吗?我知道您的模式可以以一行结尾$
(来自如何在 Less 的搜索中包含换行符?),但我需要模式来匹配跨越多行的文本。
我试过了\n
,但那只搜索字符n
。
答案1
无法跨行匹配,因为 中的搜索功能less
每次只对一个换行符分隔的行进行操作。无论系统正则表达式实现是什么(GNU、POSIX、PCRE 等),情况都是如此。
请注意,我找不到 less
,但出于此处代码审查的目的,以下链接来自 FreeBSD 贡献树。
看搜索.c:搜索范围()用于执行搜索操作。其中的循环调用线.c:forw_raw_line()检索下一个以换行符分隔的内容块。该块将传递给匹配.c:match_pattern()执行搜索模式(正则表达式)的位置。
要匹配多行,您需要使用其他工具。一种选择是进入编辑器并使用其他人建议的搜索功能。您可以通过按 来调用编辑v
器less
。
答案2
不确定如何在中做到这一点less
,但您可以在中完成相同的操作vim
。
http://vim.wikia.com/wiki/Search_across_multiple_lines
/PATTERN1\\_.\\{-}PATTERN2
原子\\_.
查找任意字符,包括行尾字符。多重\\{-}
匹配尽可能少的字符。
答案3
less
使用ed
正则表达式语法,但遗憾的是它不支持多行匹配。
我希望也能找到这一点,或者至少找到这个语法位是否在以下位置使用less
:
RE_DOT_NEWLINE 如果设置了此位,则匹配任意字符运算符将匹配换行符;如果未设置此位,则不会。
所以我可以使用.+
模式来匹配换行符。但是,事实并非如此。