Zum Zeitpunkt meines Schreibens war die Syntax der akzeptierten Antwort für die meisten, wenn nicht alle von Bourne abgeleiteten Shells falsch, einschließlich bash
. Ich schlug oben eine Bearbeitung vor und akzeptierte die Antwort, um das zu beheben, aber ich war auch geneigt, all diese anderen Informationen hinzuzufügen, und dies wäre eher eine Neufassung als eine Bearbeitung gewesen.
Sie können zusammengesetzte Befehle verwenden:
{ grep ...; bzgrep ...; } >file
..oder Unterschalen (beachten Sie die Klammern anstelle der geschweiften Klammern):
(grep ...; bzgrep ...) >file
..um die Befehle zu gruppieren. Die Subshell-Methode hat eine schönere Syntax (mehr Verzeihung von Leerzeichen und das Weglassen des letzten Semikolons), aber sie gibt entweder einen neuen Prozess vor oder "tut" so, als würden die Befehle in einer bereinigten Umgebung ausgeführt. Beide haben Vorteile, je nachdem, was Sie tun möchten, was hier keine Rolle spielt, aber es lohnt sich, nachzuschauen, wenn Sie mehr Kenntnisse in der Shell wünschen.
Hinweis: Sie können Pipelining auch mit diesen Tricks verwenden, sodass Sie Folgendes tun können:
{ grep ...; bzgrep ...; } | less
PS: Wenn Sie sich nicht um die Reihenfolge der Übereinstimmungen in Ihrer kombinierten Ausgabe kümmern, können Sie einen einzelnen &
zwischen den beiden Befehlen verwenden, z { grep ... & bzgrep ...; }
. Dann werden die beiden Befehle gleichzeitig ausgeführt: Der grep
wird gestartet und die Shell stellt ihn in den Hintergrund, dann führt die Shell den aus bzgrep
. (Aber es gibt eine kleine Einschränkung, da die Erklärung der Dateiumleitung und der Pufferung von Dateistreams möglicherweise dazu führt, dass ein sehr kleiner Teil der Zeilen in der Ausgabedatei geteilt / verstümmelt wird: Ob dies angezeigt wird, hängt davon ab, wie Ihre grep
, bzgrep
und libc
stdio.h
Funktionen implementiert sind. In den meisten Implementierungen, glaube ich den Befehl kochend vor vermeidet das Problem in eine Datei umleiten, so dass Sie tun können , { foo & bar; } | cat - >file
wie dieses Problem zu umgehen.)