Wie kann ich die Ausgabe des Befehls an einen anderen Befehl weiterleiten, während er auch auf der Konsole angezeigt wird?

758
Zain R

Ich möchte einen Teil der Ergebnisse eines Streams in eine Datei schreiben, aber ich möchte, dass der gesamte Inhalt des Streams auf der Konsole gedruckt wird. Gibt es einen Befehl, der dabei helfen könnte?

Minimales Beispiel:

Angenommen, ich hatte eine Datei foo.txtmit Inhalt:

bat dude rude 

Und ich wollte alle Zeilen in diese Datei schreiben, die den Buchstaben 'a' enthalten bar.txt. Ich könnte schreiben

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

Was würde dazu führen, bar.txtenthalten bat. Aber das würde mir nicht die Konsolenausgabe geben, die ich möchte.

Stattdessen würde ich etwas bevorzugen:

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

Das würde nicht nur schreiben bat, bar.txtsondern auch folgendes auf die Konsole schreiben:

bat dude rude 

Gibt es einen Befehl, den ich ausführen kann, um das zu tun?

0
[So leiten Sie die Ausgabe in eine Datei und in eine Standardausgabe um] (https://stackoverflow.com/q/418896/995714), [Wie kann ich die Ausgabe in der Windows-Befehlszeile sowohl übermitteln als auch anzeigen?] (Https: // superuser) com / q / 767680/241386), [So zeigen Sie die Ausgabe auf dem Terminal an und speichern gleichzeitig in eine Datei?] (https://superuser.com/q/159059/241386) phuclv vor 5 Jahren 0

2 Antworten auf die Frage

0
nimda

Sie können dies einfach verwenden:

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

Ansonsten ist eine Einlage mit möglich tee

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

Der Befehl tee liest die Standardeingabe und schreibt sie sowohl in die Standardausgabe als auch in eine oder mehrere Dateien. Der Befehl ist nach dem T-Splitter benannt, der in der Rohrinstallation verwendet wird. Es unterbricht grundsätzlich die Ausgabe eines Programms, so dass es sowohl angezeigt als auch in einer Datei gespeichert werden kann. Es führt beide Aufgaben gleichzeitig aus, kopiert das Ergebnis in die angegebenen Dateien oder Variablen und zeigt auch das Ergebnis an.

0
Kamil Maciorowski

Explizite Beispiele mit tee:

  • tee Schreiben an die TTY

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

    Das ist portabel, funktioniert in sh.

  • tee Die Standardausgabe geht an die Konsole:

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

    Dies ist nicht portabel, funktioniert in Bash und wenigen anderen Shells.

Hinweis Ich habe den catBefehl losgelassencat ( nutzlose Verwendung von ).