Less で複数行の検索を行うにはどうすればよいでしょうか?

Less で複数行の検索を行うにはどうすればよいでしょうか?

ではless、を使用して、キャリッジリターンと改行を含むパターンを検索できますか?パターンは、(から)/を使用して行で終了できることは知っています。$less で検索に改行を含めるにはどうすればいいですか?) ですが、複数行にまたがるテキストに一致するパターンが必要です。

試してみました\nが、文字のみを検索するだけですn

答え1

の検索関数は、改行で区切られた 1 行ずつ実行されるため、行の境界を越えて一致させることはできませんless。これは、システムの正規表現の実装 (GNU、POSIX、PCRE など) に関係なく当てはまります。

メインライン開発の公式ソースリポジトリが見つからなかったことに注意してください。 lessただし、ここでのコードレビューの目的上、以下のリンクは FreeBSD contrib ツリーからのものです。

見るsearch.c:検索範囲()検索操作の実装。その中のループは行.c:forw_raw_line()改行で区切られた次のコンテンツブロックを取得します。そのブロックはマッチ.c:マッチ_パターン()検索パターン(正規表現)が実行される場所。

複数の行にまたがって一致させるには、別のツールを使用する必要があります。 1 つのオプションは、他の人の提案に従ってエディターにドロップしてその検索機能を使用することです。vを押すとエディターを起動できます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 このビットが設定されている場合、任意の文字に一致する演算子は改行に一致します。このビットが設定されていない場合、改行に一致しません。

つまり、パターンを使用して改行を一致させることができます.+。しかし、そうではありません。

関連情報