出力を端子幅にトリミングするためのUtil?


12

私がする時

ps aux

出力は私の端末の幅にうまく整えられるので、長いプロセスの説明は1行を超えません。しかし、それを他の何かにパイプすると、長い行が戻ります。

psがttyに出力しておらず、出力全体が処理に重要である可能性があるため、これは適切な動作であることを理解しています。私が欲しいのは、私が終わったときに出力を元に戻す別のユーティリティです。

私はこのようなことができるようになりたいです:

ps aux | grep -v 'www-data' | nowrap  

nowrap私が探している架空のツールです。長い行が切り取られ、オーバーフローしないようにします。

このようなものはありますか?

回答:


15

cutコマンドを使用して、出力をスライスできます。例えば:

ps aux | grep -v 'www-data' | cut -c-80

これにより、各行の最初の80文字のみが保持されます。もちろん、これを任意の幅に設定できます。

bashコマンドラインを使用している場合、これを行うことができます:

ps aux | grep -v 'www-data' | cut -c-$COLUMNS

出力にタブがある場合、幅は正しく計算されない可能性があります。expandタブをスペースに変えることができます:

ps aux | grep -v 'www-data' | expand | cut -c-$COLUMNS

1
...そして、出力をgrepで色付けしたい場合(私と同じように)、cut最初に、grep次にします。
DerMike、2011年

そして〜/ .bash_aliasesファイルにエイリアスを追加しました:alias cutt = 'cut -c-$ COLUMNS'。今、私はパイプにパイプすることができます...
Samuel Lampa 14

1
出力にタブがある場合、これは正しく動作しません。助言がありますか?1つのオプションは、最初にタブをスペースに変換することですが、後でパイプラインで使用するためにタブを保持したい場合は、これを回避することをお勧めします。
アーロン・マクデイド2014年

2
expand回答を見つけて編集し、それを含めました。タブの修正
アーロンマクダイド

3

を使用して出力をトリミングできますcut。例えば

ps aux | grep -v 'www-data' | カット-c1-$ {COLUMNS}

ここ${COLUMNS}で、端子の現在の幅を提供します。このresizeコマンドを使用して、現在の幅を再生成できます。

$ resize
COLUMNS=80;
LINES=24;
export COLUMNS LINES;

これを自動化したい場合は、これをスクリプトでラップすることができますnowrap

#!/bin/bash

eval "export $(resize | grep 'COLUMNS=')"
cut -c1-${COLUMNS} -

2

そしてnagulが言ったことに加えて、bashで使用できます:

tput cols

幅を取得するには:

COLUMNS = $(tput cols)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.