
私は遭遇しましたこれ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
。