以下で複数行検索を行う方法は?


18

ではless/キャリッジリターンと改行を含むパターンを使用して検索できますか?あなたのパターンはを使用して行で終わることができることを知っています$以下の方法で検索に改行を含める方法は?)が、複数行にわたるテキストに一致するパターンが必要です。

試しましたが\n、それはnキャラクターを検索するだけです。


\n+1つ以上の改行を試しましたか?
ブロックヘンズリー14年

どのLinuxディストリビューションで、環境変数「LESS」を定義していますか?
harrymc

@harrymcこれは、複数行検索でどのように役立ちますか?
-sashoalm

情報の収集。
harrymc

2
lesssearch.c:search_range())のソースコードのレビューに基づいて、これは不可能です。検索/一致操作は、一度に1つの改行で区切られた行で実行されるため、行の境界を越えて一致させることはできません。line.c:forw_raw_line()によって呼び出される「readline」の実装を参照してくださいsearch_range
-zackse

回答:


7

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

のメインライン開発用の公式ソースリポジトリが見つかりませんでしたが、 lessここでのコードレビューの目的で、以下のリンクはFreeBSD contribツリーからのものです。

検索操作の実装については、search.c:search_range()を参照してください。そのループは、line.c:forw_raw_line()を呼び出して、次の改行で区切られたコンテンツのブロックを取得します。このブロックは、検索パターン(正規表現)が実行されるmatch.c:match_pattern()に渡されます。

複数の行で一致させるには、別のツールを使用する必要があります。1つのオプションは、エディターにドロップして、他のユーザーが提案する検索機能を使用することです。あなたは押してエディタを起動することができますvless


2

どのようにそれをするかわからないlessが、あなたは同じことを達成することができるvim

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

/PATTERN1\\_.\\{-}PATTERN2

アトム\\_.は、行末を含む任意の文字を見つけます。マルチ\\{-}は可能な限り少なく一致します。


1
ただし、vimではなく、それよりも少ないため、これは質問に答えません。コメントである必要があります。
sashoalm

1
@sashoalmまだ回答を試みているので、投票してから先に進みます。ソリューションを検索するユーザーは、1つのツールを特別に使用する必要はありません。
slhck

2

lessed正規表現構文を使用しており、残念ながら複数行のマッチングをサポートしていません。

https://www.gnu.org/software/gnulib/manual/html_node/ed-regular-expression-syntax.html#ed-regular-expression-syntax

私もそれを見つけたい、または少なくともこの構文ビットが使用されているかどうかを探していましたless

RE_DOT_NEWLINEこのビットが設定されている場合、任意の文字に一致する演算子は改行に一致します。このビットが設定されていない場合、設定されません。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.