Gibt es in der Bash eine Möglichkeit, mehrere Befehle zu verketten, die alle die gleiche Eingabe von stdin erhalten? Das heißt, ein Befehl liest stdin, führt eine Verarbeitung durch und schreibt die Ausgabe in eine Datei. Der nächste Befehl in der Kette erhält dieselbe Eingabe, die der erste Befehl erhalten hat. Und so weiter.
Nehmen wir zum Beispiel eine große Textdatei, die durch Filterung des Inhalts in mehrere Dateien aufgeteilt werden soll. Etwa so:
cat food_expenses.txt | grep "coffee" > coffee.txt | grep "tea" > tea.txt | grep "honey cake" > cake.txt
Dies funktioniert offensichtlich nicht, denn der zweite grep erhält die Ergebnisse des ersten grep Ausgabe und nicht die ursprüngliche Textdatei. Ich habe versucht, einzufügen T-Stücke aber das hilft nicht. Gibt es irgendeine Bash-Magie, die den ersten grep dazu bringt, seine Eingabe in die Leitung, nicht in den Ausgang?
Übrigens war die Aufteilung einer Datei ein einfaches Beispiel. Stellen Sie sich vor, Sie würden einen kontinuierlichen Live-Textstrom, der über ein Netzwerk kommt, aufteilen (durch Mustersuche filtern) und die Ausgabe in verschiedene benannte Pipes oder Sockets schreiben. Ich würde gerne wissen, ob es eine einfache Möglichkeit gibt, dies mit einem Shell-Skript zu tun.
(Diese Frage ist eine bereinigte Version meiner früher auf der Grundlage von Antworten, die auf die Unklarheit hinwiesen)