web-dev-qa-db-ja.com

Linuxでのgrepとパイプについて

私は遭遇しました this 私の問題を説明する投稿。 「foo World」を含むfile.txtというファイルがあるとします。
タイラーによって投稿された回答は多くを説明していますが、私はどのように混乱しています

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は文字列としてファイルパスを必要とすると思いましたか?

3
Rajeshwar

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

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

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

出力をSTDOUTに送信します。

$ cat file 
1
2
3
4
5

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

$ cat file | grep 5
5

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

$ grep 5 file 
5

STDINを介してファイルの内容を直接処理します。

$ grep 5 < <(cat file)
5

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

4
slm