grepの結果をgrepする方法は?

grepの結果をgrepする方法は?

どのファイルに特定の単語が含まれているかを確認するには、一部のファイルをgrepする必要があります。

grep -l word *

次に、このファイルのリストをgrepして、どのファイルに別の単語が含まれているかを確認する必要があります。最も簡単な方法はおそらくスクリプトを書くことですが、どうすればよいかわかりません。

答え1

すべてのファイル名にスペース、一重引用符、二重引用符、またはバックスラッシュ文字(または - で始まるGNU文字grep)が含まれていないと仮定すると、次のことができます。

grep -l word * | xargs grep word2

Xargsは、最初のgrepの各ファイルに対して2番目のgrepを実行します。

GNU grep/xargsまたは互換性を使用すると、次の方法でより信頼性を高めることができます。

grep -lZ word ./* | xargs -r0 grep word2

Useは印刷ファイル名をNULで区切っている-Zのでgrep、一緒に使用できます。xargs -0最初のオプションで何も見つからない場合は、2番目の-rオプションを実行する必要はありません。xargsgrepgrep

答え2

grep -l word1 $(grep -l word2 *)

あるいは、同じ行にある2つの単語のいずれかです。

grep -w 'word1\|word2' *

バラよりここ

答え3

特定の単語を含むファイルを見つけて、別の単語を含むファイルをフィルタリングする必要がある場合は、次の一連のコマンドを使用できます。

grep word * | awk -F ':' '{print $1}'|uniq | xargs grep word2
  • grep word *- 「単語」を含むすべてのファイルが表示され、ファイル名がリストの最初に表示されます。
  • awk -F ':' '{print $1}'- 結果のファイル名のみを印刷します。
  • uniq- ファイル名を複数回印刷しないようにします。
  • xargs grep word2- 受信したファイルのリストから再検索します。

関連情報