Utile per tagliare l'output alla larghezza del terminale?


12

Quando io faccio

ps aux

L'output viene ben ritagliato alla larghezza del mio terminale, in modo che le descrizioni di processo lunghe non occupino più di una riga. Tuttavia, se lo installo in qualcos'altro, le lunghe code ritornano.

Mi rendo conto che questo è un comportamento corretto, dal momento che ps non viene più distribuito a un tty e l'intero output potrebbe essere cruciale per l'elaborazione. Quello che voglio è un altro util che ritaglierà l'output quando ho finito.

Voglio essere in grado di fare qualcosa del genere:

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

nowrapè lo strumento immaginario che sto cercando. Farà in modo che le linee lunghe vengano ritagliate e non traboccino.

C'è qualcosa del genere?

Risposte:


15

È possibile utilizzare il cutcomando per tagliare l'output. Per esempio:

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

Ciò manterrà solo i primi 80 caratteri di ogni riga. Ovviamente puoi impostarlo su qualsiasi larghezza desideri.

Se si utilizza la riga di comando bash, è possibile farlo:

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

Se l'output presenta delle schede, la larghezza potrebbe non essere calcolata correttamente. expandpuò trasformare le schede in spazi:

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

1
... e se vuoi che il tuo output sia colorato con grep (come faccio io), cutprima tu e greppoi.
DerMike,

E ho aggiunto un alias nel mio file ~ / .bash_aliases: alias cutt = 'cut -c - $ COLUMNS'. Ora posso solo fare pipa per tagliare ...
Samuel Lampa,

1
Ciò si comporta in modo errato se sono presenti schede nell'output. Eventuali suggerimenti? Una delle opzioni è di convertire prima le schede in spazi, ma sarebbe bello evitarlo, nel caso in cui desideriamo conservare le schede per più tardi nella pipeline.
Aaron McDaid,

2
Ho trovato expande modificato la risposta per includerla. Corregge per tab
Aaron McDaid

3

È possibile ritagliare l'output utilizzando cut. per esempio

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

dove ${COLUMNS}fornisce la larghezza corrente del terminale. Il resizecomando può essere utilizzato per rigenerare la larghezza corrente:

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

Potresti, se volessi automatizzare questo, racchiuderlo in uno script nowrap:

#!/bin/bash

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

2

E oltre a quello che ha detto nagul, puoi usare in bash:

tput cols

per ottenere la larghezza:

COLONNE = $ (tput cols)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.