[解決済み】複数行検索のための正規表現(grep)が必要です【重複
質問
を実行しています。
grep
という単語を持つすべての *.sql ファイルを検索します。
select
の後に続く単語
customerName
に続いて、単語
from
. このSELECT文は何行にも渡ることができ、タブや改行を含むことができます。
以下のように、いくつかのバリエーションを試してみました。
$ grep -liIr --include="*.sql" --exclude-dir="\.svn*" --regexp="select[a-zA-Z0-
9+\n\r]*customerName[a-zA-Z0-9+\n\r]*from"
しかし、これは永遠に実行されるだけです。どなたか正しい構文を教えていただけませんか?
どのように解決するのですか?
grep の亜種をインストールする必要なし
pcregrep
を使用すると、grepで複数行の検索ができます。
$ grep -Pzo "(?s)^(\s*)\N*main.*?{.*?^\1}" *.c
説明する。
-P
起動
正規表現
grep 用 (正規表現の強力な拡張)
-z
入力を一連の行として扱い、それぞれの行を改行ではなくゼロバイト(ASCIIのNUL文字)で終了させます。つまり、grepは行末がどこであるかを知っていますが、入力を1つの大きな行として見ています。 と一緒に使うと、末尾に NUL 文字が追加されることに注意してください。
-o
コメントをご覧ください。
-o
マッチングのみを印刷します。なぜなら
-z
このようにすると、ファイル全体が1つの大きな行のようになるので、マッチした場合はファイル全体が印刷されることになりますが、この方法ではそのようなことはありません。
正規表現では
(?s)
起動
PCRE_DOTALL
ということになります。
.
は、任意の文字または改行
\N
を使っても、改行以外を見つけることができます。
PCRE_DOTALL
が起動しました。
.*?
見つける
.
を、欲張らないモードで、つまり、できるだけ早く停止させる。
^
行頭を探す
\1
最初のグループへのバックリファレンス (
\s*
). これは、メソッドのインデントが同じものを探すための試みです。
ご想像の通り、この検索ではメインメソッドがC言語(
*.c
) ソースファイルです。
関連
-
[解決済み] 正規表現のメタ文字の違いについて
-
[解決済み] シェルスクリプトで正規表現を使用するにはどうすればよいですか?
-
[解決済み] Gitの履歴からコミットしたコードをgrep(検索)する方法
-
[解決済み] bashと正規表現を使って1行でプロセスを検索してkillする
-
[解決済み] Gitのコミットの差分や内容を特定の単語でgrepする方法
-
[解決済み] grepで行番号を取得する
-
[解決済み】Grep RegExからグループをキャプチャする
-
[解決済み】Grep正規表現に文字列が含まれない件
-
[解決済み] [Solved] grepの出力で行末に行番号を表示し、ヒット数も表示するには?
-
[解決済み】ASCII以外の文字をすべてgrepする方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 正規表現におけるスラッシュのエスケープ
-
[解決済み] この正規表現に負の小数点を含めるにはどうしたらよいですか?
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] 正規表現のメタ文字の違いについて
-
[解決済み] シェルスクリプトで正規表現を使用するにはどうすればよいですか?
-
[解決済み] 郵便番号の正規表現
-
[解決済み] 2つ以上の連続した文字を検索するためのRegEx
-
[解決済み】grepを使用して複数行にまたがるパターンを見つけるには?
-
[解決済み] sed/grepを使って、2つの単語の間のテキストを抽出するには?
-
[解決済み] ファイル内の複数行のパターンを検索するにはどうすればよいですか?