検索したい大量のファイルがあります。
で囲まれているすべての単語 (単語のみ) を検索したいX
。私は後読みと先読みでこれを行います:
grep -rhoP "(?<=X)[a-zA-Z0-9_]*(?=X)" .
で囲まれた前の結果から、完全なコンテキストを持つ単語があるかどうかを知りたいですY
。特定の単語に対してそれを行うことができますabc
grep -rP "(?<=Y)abc(?=Y)" .
しかし、2 つのコマンドを一緒にパイプするにはどうすればよいでしょうか。
アップデート
大量の C ファイルがあります。すべての api 関数は、最初に多くの .h ファイルの 1 つで宣言され、多くの .c ファイルとインライン化された .h ファイルの 1 つで使用されます。
一部の関数は直接アクセスできず、関数ポインタを介してアクセスできますが、これは開発にとって大きな障害となります。この目的のために、いくつかのマクロ (FP
およびCALL
) を作成して、この要件を簡単にオン/オフできるようにしました。
FP(DoThis)
void DoThis(void);
- 要件がONの場合、後で を使用して使用できる
FP
関数ポインタ (この場合は for) を定義します。DoThis
CALL(DoThis)();
- 要件がOFFの場合、
FP
は何も展開されず、CALL(DoThis)
just に展開されますDoThis
。
この方法で関数ポインタが作成されるすべての関数のリストは、次の方法で取得できます。
grep -rhoP "(?<=FP\()[a-zA-Z0-9_]*(?=\))" .
関数 DoThis の関数ポインターが使用されているすべての場所のリストは、次の方法で取得できます。
grep -rP "(?<=CALL\()DoThis(?=\))" .
FP
ここで、 を使用して作成された関数の関数ポインタをCALL
フェッチできるすべての場所のリストが必要です。したがって、どういうわけか、最初の grep の各結果が 2 番目の grep に供給され、最終結果がグループ化されるように、2 つの grep を連鎖させたいと考えています。