2017-09-14 7 views
0

Include header in the 'grep' resultのように、grepの出力のヘッダを保持することに興味がありました。コマンドグループへのパイプは、一部のコマンドでのみ機能するのはなぜですか?

問題解決の解決策(sedを使用)が質問に表示されますが、answer with most upvotesが私の注目を集めました。たとえば、grep --colorを利用できます。これは、例えば、コマンドheadgrepcommand groupへの入力をパイプ示唆:

ps -ef | { head -1; grep python; } 

ただし、リンクされた答えとコメントに書かれたように、これはパイプの左側にあるすべてのコマンドでは動作しません。 。 psまたはlsofでうまく動作しますが、dflsなどでは機能しません。それらを使用する場合は、グループ内の最初のコマンドの出力のみが印刷されます。コマンド・グループへの配管が唯一のいくつかのコマンドのために働く理由

$ df | { head -1; grep '/'; } 
Filesystem         1K-blocks  Used Available Use% Mounted on 
$ 

は誰が説明してもらえますか?それを普遍的に働かせる方法はありますか?

+0

一般的には、入力を受け取る2番目のコマンドに頼るべきではないと思います。 –

+0

'awk'を使って、最初の行またはマッチした行を表示することができます...' ps -ef | awk 'NR == 1 ||/python/'' –

答えて

1

質問に対する回答はcomments of the linked answerです。

明らかにps -eは、最初にヘッダ行を送信してから、何も送信しないで残りの出力をバッファしています。 headは、最初の行の後にストリームが閉じられていると考える必要があります。そのため、残りの部分はgrepのままにしておきます。

これは偶然にすぎません。

普遍的に機能させる方法はありますか?

すべて可能ですが、他のすべてを再コード化して再コンパイルする必要があります。だから...不可能、申し訳ありません。

関連する問題