Как передать вывод команды в другую команду, одновременно отображая ее на консоли?

554
Zain R

Я хочу записать часть результатов потока в файл, но я хочу, чтобы все содержимое потока было выведено на консоль. Есть ли какая-нибудь команда, которая поможет с этим?

Минимальный пример:

Скажем, у меня был файл foo.txtс содержимым:

bat dude rude 

И я хотел написать все строки в этом файле, которые содержат букву «а» bar.txt. Я мог бы написать

cat foo.txt | grep 'a' > bar.txt 

Что приведет к bar.txtсодержанию bat. Но это не дало бы мне консольный вывод, который я хочу.

Вместо этого я бы предпочел что-то вроде:

cat foo.txt | output-stdin-to-console-and-pass-to-stdout | grep 'a' > bar.txt 

Что бы не только писать, batчтобы, bar.txtно и написать следующее в консоли:

bat dude rude 

Есть ли какая-либо команда, которую я могу выполнить, чтобы сделать это?

0
[Как перенаправить вывод в файл и стандартный вывод] (https://stackoverflow.com/q/418896/995714), [Как я могу одновременно направлять и отображать вывод в командной строке Windows?] (Https: // superuser. ru / q / 767680/241386), [Как показать вывод на терминале и сохранить в файл одновременно?] (https://superuser.com/q/159059/241386) phuclv 5 лет назад 0

2 ответа на вопрос

0
nimda

Вы можете просто использовать это:

cat foo.txt && cat foo.txt | grep 'a' > bar.txt

В противном случае возможно использование одного вкладыша. tee

С https://www.geeksforgeeks.org/tee-command-linux-example/

Команда tee считывает стандартный ввод и записывает его как в стандартный вывод, так и в один или несколько файлов. Команда названа в честь Т-сплиттера, используемого в сантехнике. Это в основном нарушает вывод программы, так что она может быть отображена и сохранена в файле. Он выполняет обе задачи одновременно, копирует результат в указанные файлы или переменные, а также отображает результат.

0
Kamil Maciorowski

Явные примеры с tee:

  • tee писать в tty

    < foo.txt tee /dev/tty | grep 'a' > bar.txt 

    Это портативный, работает в sh.

  • tee запись в процесс подстановки, его стандартный вывод идет на консоль:

    < foo.txt tee >(grep 'a' > bar.txt) 

    Это не переносимо, работает в Bash и нескольких других оболочках.

Обратите внимание, я избавился от catкоманды ( бесполезное использованиеcat ).

Похожие вопросы