如何用更少的時間進行多行搜尋?

如何用更少的時間進行多行搜尋?

在 中less,您可以使用/包含回車符和換行符的模式進行搜尋嗎?我知道你的模式可以使用$(來自如何在 less 搜尋中包含換行符?),但我需要模式來匹配跨多行的文字。

我嘗試過\n,但這只搜尋角色n

答案1

不可能跨行邊界進行匹配,因為搜尋函數less一次對單一換行符分隔的行進行操作。無論系統正規表示式實現如何(GNU、POSIX、PCRE 等),情況都是如此。

請注意,我找不到用於主線開發的官方原始碼庫 less,但出於程式碼審查的目的,下面的連結來自 FreeBSD contrib 樹。

搜尋.c:search_range()用於執行搜尋操作。其中的循環調用line.c:forw_raw_line()檢索下一個換行符號分隔的內容區塊。該塊傳遞給match.c:match_pattern()執行搜尋模式(正規表示式)的位置。

要跨多行匹配,您需要使用不同的工具。一種選擇是進入編輯器並按照其他人的建議使用其搜尋功能。您可以按vin來呼叫編輯器less

答案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 如果設定了該位,則符合任意字元運算子將符合換行符;如果未設定該位,則不會。

所以我可以使用.+模式來匹配換行符。但不,事實並非如此。

相關內容