В bash есть ли способ объединить несколько команд, все из которых принимают один и тот же ввод из stdin? То есть одна команда читает stdin, выполняет некоторую обработку, записывает вывод в файл. Следующая команда в цепочке получает тот же ввод, что и первая команда. И так далее.
Например, рассмотрим большой текстовый файл, который можно разделить на несколько файлов путем фильтрации содержимого. Примерно так:
cat food_expenses.txt | grep "coffee" > coffee.txt | grep "tea" > tea.txt | grep "honey cake" > cake.txt
Это, очевидно, не работает, потому что второй grep получает вывод первого grep , а не исходный текстовый файл. Я попытался вставить тройник , но это не помогает. Есть ли какая-то магия bash, которая может заставить первую команду grep отправлять свой вход в канал, а не на выход?
И, кстати, разделение файла было простым примером. Рассмотрите возможность разделения (подбора файлов путем поиска по шаблону) непрерывного потока живого текста, поступающего по сети и записывающего выходные данные в разные именованные каналы или сокеты. Я хотел бы знать, если есть простой способ сделать это с помощью сценария оболочки.
(Этот вопрос - исправленная версия моей более ранней , основанная на ответах, которые указали на неясность)