Понимание grep и pipe в Linux

Понимание grep и pipe в Linux

Я наткнулся наэтотпост, который объясняет мою проблему. Предположим, есть файл, который называется file.txt, который содержит "foo World".
Ответ, опубликованный Тайлером, многое объясняет, однако я не понимаю, как

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

Вывод cat fileотправляется через STDOUT в grepSTDIN через канал.

$ cat file | grep 5
5

Обработка файла как аргумента командной строки.

$ grep 5 file 
5

Обработка содержимого файла напрямую через STDIN.

$ grep 5 < <(cat file)
5

Здесь я демонстрирую, что содержимое fileможет быть направлено grepчерез STDIN выше.

Связанный контент