他の部分文字列を含むファイルから部分文字列を取得する方法

他の部分文字列を含むファイルから部分文字列を取得する方法

他の文字列を含むファイルのリストから文字列を検索したいです。デフォルトでは、最初の文字列を含むファイルのリストを取得し、そのファイルから別の文字列を検索する必要があります。

次のコマンドが役立ちます。

grep -ril './' -e "first_string" | xargs grep -i "second_string"

コマンドの前半は、以下を含むファイルのリストを提供します。最初の文字列

r- 再帰的にディレクトリに移動

i- 検索する文字列は大文字と小文字を区別しません。

l- 一致するファイルのリスト

後半はこれらのファイルパスを使用し、2番目の部分を実行してgrepファイルに次のものがあるかどうかを検索します。2番目の文字列

ここでは、xargsこれらのファイルをインポートして2番目のgrepコマンドを実行する必要があります。

ベストアンサー1

あなたが望むもの:

grep -rilZ 'first_string' . | xargs -r0 grep -Hi 'second_string'

GNUユーティリティ(すでにGNU拡張を使用しているため、すでに持っているようです-r)を想定してください。

それは:

  • -Zとを使用してxargs -0パスリストを確実に渡します(Unixファミリーシステムでは、パスリストにゼロ以外のすべてのバイト値を含めることはできますが、非常に具体的な形式はxargs必要ありません)。-0
  • 最初のファイルがファイルを見つけられない場合は、-rforを使用してxargs2番目のファイルの実行を避けてください(ここで省略しても問題はありません。2番目のファイルは空の標準入力をgrepにします)。grepgrep
  • オプションはオプションではなく引数の前に配置する必要があります。
  • -H2番目のオプションを使用して、grepファイル名が常に印刷されるように(最後にファイルパスのみが渡された場合でも)、一致する場所を知ることができます。grepサポートされていない実装の場合、代替-H案は検索する/dev/nullファイルのリストに追加することです。その後、複数のファイル名を渡すと、常にそのファイル名が印刷されます。grepgrep

おすすめ記事