Linux での grep とパイプの理解

Linux での grep とパイプの理解

私は遭遇しましたこれfile.txt私の問題を説明する投稿。 "foo World"を含むというファイルがあるとします。Tyler
が投稿した回答は多くのことを説明していますが、どのように

cat file.txt | grep "foo"

と類似しています

grep "foo" file.txt

私はgrep以下が必要だと考えました

grep input argument  // input is the string to search for (i.e) foo and
                     //  argument is the file path (./file.txt)

これで、 の出力はcat file.txtファイルの内容となり、foo Worldこれが の入力になりますgrep。 私の考えは正しいでしょうか? そうであれば、grep文字列としてファイルパスが必要であると考えていました。

答え1

ほとんどのコマンドは、入力用に開く必要のあるファイル、または STDIN 経由でコマンドに渡されるデータ ストリームのいずれかの入力を処理できます。

の内容がcat file.txtパイプ ( |) を介して別のコマンドに送信されると、左側のパイプに渡された STDOUT 経由の出力が設定され、パイプの STDIN の右側にあるコマンドに送られます。

コンテンツがパイプ経由で STDOUT -> STDIN に渡されていない場合、コマンドはコマンドライン引数で名前で渡されたファイルを開いてデータを受信できます。

出力を STDOUT に送信します。

$ cat file 
1
2
3
4
5

からの出力は、パイプを介して STDOUT 経由で の STDINcat fileに送信されます。grep

$ cat file | grep 5
5

ファイルをコマンドライン引数として処理します。

$ grep 5 file 
5

STDIN 経由でファイルのコンテンツを直接処理します。

$ grep 5 < <(cat file)
5

ここでは、 の内容を上記の STDIN 経由fileで送信できることを示していますgrep

関連情報