私は次のようにネストされたgrepを実行しています。
grep -ir "Some string" . |grep "Another string I want to find in the other grep's results"
これは期待どおりにうまく機能しますが(2番目のgrepから最初のgrepの結果もフィルタリングしました)、「-l」オプションを追加すると、2番目のgrepからファイルリストのみを取得し、何も取得できません。未満。
grep -ir "Some string" . |grep -l "Another string I want to find in the other grep's results"
これにより、次のような出力が生成されます。
(standard input)
ファイルリストだけが欲しいときは、パイピングが機能しないようです。他のオプションがありますか?
ベストアンサー1
オプションを使用-l
すると、grep
ユーティリティは指定されたパターンを含むファイル名のみを印刷します。私のシステムマニュアルには、このオプションについて次のように記載されています。
選択した行を含むファイル名のみが標準出力に書き込まれます。 grep は一致するものが見つかるまでファイルを検索するだけで、検索コストが潜在的に安くなります。検索されたファイルごとに、パス名が一度にリストされます。標準入力を検索すると、「(標準入力)」という文字列が記録されます。
パイプの2番目のエントリはファイルでgrep
はなく標準入力から読み取られるため、標準入力ストリームに到着したとき以外はデータがどこから来たのかわかりません。これがテキスト文字列を返す理由です(standard input)
。大会場に一番近いところです。
最初のパターンの2つのパターンを組み合わせますgrep
(ここではするどのファイルを探しているかを調べるには)、次を参照してください。複数のANDパターンでgrepを実行する方法は?