入れ子になったパイプ grep は「(標準入力)」文字列を生成します。

入れ子になったパイプ grep は「(標準入力)」文字列を生成します。

私は次のようにネストされた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を実行する方法は?

おすすめ記事