複数行文字列のディレクトリ検索

複数行文字列のディレクトリ検索

複数行の文字列を含むリポジトリ内のすべてのファイルを再帰的に検索し、それを含むファイル名を返す方法を探しています。段落は約30行のタイトルにすぎません。そのため、pcregrep複数行検索が可能であることを知っています。しかし、完全な表現を入れなければなりません。これは私が探している長い段落なので、変数に入れてからその変数をgrepしたいと思います。だから基本的にそれはすべてです。find . -name "*.[ch]" | xargs pcregrep -M $paragraphしかし、これはうまくいきません。誰もが正しい方向に私を指すことができますか?

ベストアンサー1

ファイルの最初の30行を一致させようとしているので、テキストをファイルに保存し、それを使用して参照ref_fileファイルをdiff各ファイルの最初の30行と比較することができます。

find . -name "*.[ch]" -exec ./myscript {} \; -print

./myscriptどこ

#!/bin/sh

head -n 30 "$1" | diff - /path/to/ref_file >/dev/null

したがって、-print最初のコマンド-execは、前のコマンドが評価された場合にのみ実行されます。本物つまり、参照ファイルの最初の30行と現在のファイルの間に違いはありません。
または、スクリプトを使用せずにファイル名を次の場所に保存する場合logfile

find . -type f -exec sh -c 'head -n 30 "$0" | diff - /path/to/ref_file >/dev/null' {} \; -print >logfile

これは正確に一致するものを探していると仮定します。それ以外の場合、違いが1つの空白であってもdiff終了します。1

おすすめ記事