問題を説明するこの投稿に出くわしました。 「fooWorld」を含むfile.txt
というファイルがあるとします。
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
の出力はこれはgrep
の入力になりますか?私は正しいですか?もしそうなら、grep
には文字列としてファイルパスが必要だと思いましたか?
コメント
回答
ほとんどのコマンドで処理できます入力のために開く必要のあるファイル、またはSTDINを介してコマンドに渡されるデータのストリームとしての入力。
cat file.txt
はパイプ(|
)を介して別のコマンドに送信され、左側のパイプに渡されたSTDOUTを介した出力がセットアップされ、次のコマンドに送られます。 「sはパイプの右側にあります」sSTDIN。
コンテンツがパイプを介してSTDOUT-> STDINを介して渡されていない場合、コマンドは、を介して名前で渡されたファイルを開くことによってデータを受信できます。コマンドライン引数。
例
STDOUTに出力を送信します。
$ cat file 1 2 3 4 5
はSTDOUT経由でgrep
のSTDINにパイプ経由で送信されます。
$ cat file | grep 5 5
ファイルをコマンドライン引数として処理します。
$ grep 5 file 5
STDINを介してファイルの内容を直接処理します。
$ grep 5 < <(cat file) 5
ここで「file
のコンテンツを上記のSTDIN経由でgrep
に送信できることを示しています。
のmanページ(タイプ
man grep
)には、「grep [options] PATTERN [FILE …]」と表示されます。 「FILE」の後に「…」が続くという事実は、複数のファイル引数が存在する可能性があることを意味します。角かっこ([
…]
)で囲まれているという事実は、ファイル引数がオプションであることを意味します(つまり、いずれか)。読み続けると、「 Grep が名前付き入力ファイル(または、名前が付けられていない場合は標準入力、またはファイル名-
が与えられます)…。」したがって、ファイルが指定されていない場合、grepは標準入力を検索します。