Util untuk memangkas output ke lebar terminal?

12

Kapan saya melakukannya

ps aux

Output dipangkas dengan baik ke lebar terminal saya, sehingga deskripsi proses panjang tidak mengambil lebih dari satu baris. Namun, jika saya menyalurkannya ke hal lain, garis panjang kembali.

Saya menyadari ini adalah perilaku yang tepat, karena ps tidak lagi menghasilkan tty dan seluruh output mungkin penting untuk diproses. Yang saya inginkan adalah util lain yang akan memangkas output ketika saya selesai.

Saya ingin dapat melakukan sesuatu seperti ini:

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

nowrapadalah alat imajiner yang saya cari. Ini akan memastikan garis panjang dipotong dan tidak meluap.

Apakah ada yang seperti ini?

itsadok
sumber

Jawaban:

15

Anda dapat menggunakan cutperintah untuk memotong output. Sebagai contoh:

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

Ini hanya akan menyimpan 80 karakter pertama dari setiap baris. Tentu saja Anda dapat mengaturnya sesuai dengan lebar yang Anda inginkan.

Jika menggunakan perintah bash, Anda bisa melakukan ini:

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

Jika output memiliki tab, maka lebar mungkin tidak dihitung dengan benar. expanddapat mengubah tab menjadi spasi:

ps aux | grep -v 'www-data' | expand | cut -c-$COLUMNS
retracile
sumber
1
... dan jika Anda ingin output Anda diwarnai oleh grep (seperti yang saya lakukan), Anda cutterlebih dahulu dan grepkemudian.
DerMike
Dan saya menambahkan alias di file ~ / .bash_aliases saya: alias cutt = 'cut -c - $ COLUMNS'. Sekarang saya bisa memotong pipa ...
Samuel Lampa
1
Ini keliru jika ada tab di output. Ada saran? Salah satu opsi adalah mengonversi tab menjadi spasi terlebih dahulu, tapi alangkah baiknya untuk menghindari ini, jika kita ingin mempertahankan tab untuk nanti di dalam pipa.
Aaron McDaid
2
Saya menemukan expanddan mengedit jawaban untuk memasukkannya. Memperbaiki untuk tab
Aaron McDaid
3

Anda dapat memotong output menggunakan cut. misalnya

ps aux | grep -v 'www-data' | cut -c1 - $ {COLUMNS}

di mana ${COLUMNS}menyediakan lebar terminal saat ini. The resizeperintah dapat digunakan untuk kembali menghasilkan lebar saat ini:

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

Anda dapat, jika Anda ingin mengotomatisasi ini, membungkusnya dalam sebuah skrip nowrap:

#!/bin/bash

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

sumber
2

Dan sebagai tambahan dari apa yang dikatakan nagul, Anda dapat menggunakan di bash:

col tput

untuk mendapatkan lebar:

COLUMNS = $ (tput cols)


sumber