Ich war daran interessiert, den Header des Eingangs im grep
Ausgang wie in der Frage Include header in the 'grep' result zu halten.Warum funktioniert eine Pipe zu einer Befehlsgruppe nur für einige Befehle?
Obwohl eine funktionierende Lösung (mit sed
) direkt in der Frage präsentiert wird, zog die answer with most upvotes meine Aufmerksamkeit auf sich. Es ermöglicht beispielsweise die Verwendung von grep --color
. Er schlägt vor, den Eingang zu einem command group mit den Befehlen kochenden head
und grep
, zB:
ps -ef | { head -1; grep python; }
jedoch, wie in der verknüpften Antwort und ein Kommentar geschrieben, das nicht mit allen Befehlen auf der linken Seite des Rohres funktioniert . Es funktioniert gut mit ps
oder lsof
aber funktioniert nicht für df
, ls
und andere. Wenn sie verwendet wird, wird nur der Ausgang des ersten Befehls in der Gruppe gedruckt: nur
$ df | { head -1; grep '/'; }
Filesystem 1K-blocks Used Available Use% Mounted on
$
Könnte jemand erklären, warum Rohrleitungen zu einer Befehlsgruppe für einige Befehle funktionieren? Gibt es eine Möglichkeit, es universell funktionieren zu lassen?
Im Allgemeinen sollten Sie sich nicht darauf verlassen, dass der zweite Befehl irgendeine Eingabe erhält. –
Sie können 'awk' verwenden, um die erste Zeile oder die übereinstimmenden Zeilen zu drucken ...' ps -ef | awk 'NR == 1 ||/python/'' –