複数行の文字列を含むリポジトリ内のすべてのファイルを再帰的に検索し、それを含むファイル名を返す方法を探しています。段落は約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