0

検索したい大量のファイルがあります。

で囲まれているすべての単語 (単語のみ) を検索したい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) を定義します。DoThisCALL(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 を連鎖させたいと考えています。

4

1 に答える 1

0

たぶん、この善人

grep -rho 'XY[a-zA-Z0-9_]*YX' . | sed 's/[XY]//g'
于 2013-03-08T19:29:51.103 に答える