GNU/Linux >> Linux の 問題 >  >> Linux

複数行検索用の正規表現 (grep) が必要

grep バリアント pcregrep をインストールする必要なし 、grep で複数行の検索を行うことができます。

$ grep -Pzo "(?s)^(\s*)\N*main.*?{.*?^\1}" *.c

説明:

-P grep の perl-regexp をアクティブ化 (正規表現の強力な拡張)

-z 入力を一連の行として扱い、改行の代わりにゼロ バイト (ASCII NUL 文字) で終了します。つまり、grep は行の終わりがどこにあるかを認識していますが、入力を 1 つの大きな行として認識します。 -o で使用すると、末尾に NUL 文字も追加されることに注意してください。 、コメントを参照してください。

-o 一致するものだけを印刷します。 -z を使用しているため 、ファイル全体が単一の大きな行のようなものであるため、一致する場合はファイル全体が印刷されます。

正規表現:

(?s) PCRE_DOTALL を有効化 、つまり . 任意の文字または改行を検索します

\N PCRE_DOTALL であっても、改行以外はすべて検索します アクティブ化

.*? . を見つける 非貪欲モード、つまり、できるだけ早く停止します。

^ 行頭を見つける

\1 最初のグループへの後方参照 (\s* )。これはメソッドの同じインデントを見つけようとする試みです。

ご想像のとおり、この検索で​​は main メソッドが C (*.c) で出力されます。 ) ソースファイル。


私はgrepがあまり得意ではありません。しかし、この問題は AWK コマンドを使用して解決できます。参照してください

awk '/select/,/from/' *.sql

上記のコードは、select が最初に出現した結果です。 from の最初のシーケンスまで .ここで、返されたステートメントに customername が含まれているかどうかを確認する必要があります か否か。このために、結果をパイプできます。また、awk または grep を再度使用できます。


Linux
  1. Grepを使用して、ハイフン(-)で始まるパターンを検索するにはどうすればよいですか?

  2. プロジェクト内の多くのファイルから特定のコード行をすばやく検索する方法

  3. Linuxでディレクトリのコンテンツ全体で単語を検索する方法

  1. GUIでファイルを検索しますか?

  2. 開発者向けの10の実用的なGrepコマンドの例

  3. grep を使用して逆方向に検索する

  1. ファイル内の複数行パターンを検索するにはどうすればよいですか?

  2. Linux で grep の検索仕様として使用するパイプ出力

  3. Linuxシェルスクリプトで正規表現を使用してファイルを検索する方法