
在 中less
,您可以使用/包含回車符和換行符的模式進行搜尋嗎?我知道你的模式可以使用$
(來自如何在 less 搜尋中包含換行符?),但我需要模式來匹配跨多行的文字。
我嘗試過\n
,但這只搜尋角色n
。
答案1
不可能跨行邊界進行匹配,因為搜尋函數less
一次對單一換行符分隔的行進行操作。無論系統正規表示式實現如何(GNU、POSIX、PCRE 等),情況都是如此。
請注意,我找不到用於主線開發的官方原始碼庫 less
,但出於程式碼審查的目的,下面的連結來自 FreeBSD contrib 樹。
看搜尋.c:search_range()用於執行搜尋操作。其中的循環調用line.c:forw_raw_line()檢索下一個換行符號分隔的內容區塊。該塊傳遞給match.c:match_pattern()執行搜尋模式(正規表示式)的位置。
要跨多行匹配,您需要使用不同的工具。一種選擇是進入編輯器並按照其他人的建議使用其搜尋功能。您可以按v
in來呼叫編輯器less
。
答案2
不確定如何在 中執行此操作less
,但您可以在 中完成相同的操作vim
。
http://vim.wikia.com/wiki/Search_across_multiple_lines
/PATTERN1\\_.\\{-}PATTERN2
原子\\_.
查找包括行尾在內的任何字元。多重\\{-}
配對盡可能少。
答案3
less
正在使用ed
正規表示式語法,不幸的是它不支援多行匹配。
我也希望找到這一點,或至少找到這個語法位元是否用於less
:
RE_DOT_NEWLINE 如果設定了該位,則符合任意字元運算子將符合換行符;如果未設定該位,則不會。
所以我可以使用.+
模式來匹配換行符。但不,事實並非如此。