Zum Trimmen der Ausgabe auf die Klemmenbreite?

11

Wenn ich es tue

ps aux

Die Ausgabe wird gut auf die Breite meines Terminals zugeschnitten, sodass lange Prozessbeschreibungen nicht mehr als eine Zeile dauern. Wenn ich es jedoch in etwas anderes pfeife, kehren die langen Schlangen zurück.

Mir ist klar, dass dies ein korrektes Verhalten ist, da ps nicht mehr an ein tty ausgegeben wird und die gesamte Ausgabe für die Verarbeitung von entscheidender Bedeutung sein kann. Was ich möchte, ist ein weiteres Dienstprogramm, das die Ausgabe zurückschneidet, wenn ich fertig bin.

Ich möchte in der Lage sein, so etwas zu tun:

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

nowrapist das imaginäre Werkzeug, das ich suche. Dadurch wird sichergestellt, dass lange Zeilen abgeschnitten werden und nicht überlaufen.

Gibt es so etwas?

itsadok
quelle

Antworten:

14

Mit dem cutBefehl können Sie die Ausgabe in Scheiben schneiden. Beispielsweise:

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

Dadurch bleiben nur die ersten 80 Zeichen jeder Zeile erhalten. Sie können das natürlich auf jede gewünschte Breite einstellen.

Wenn Sie die Bash-Befehlszeile verwenden, können Sie Folgendes tun:

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

Wenn die Ausgabe Registerkarten enthält, wird die Breite möglicherweise nicht korrekt berechnet. expandkann Tabulatoren in Leerzeichen verwandeln:

ps aux | grep -v 'www-data' | expand | cut -c-$COLUMNS
retracile
quelle
1
... und wenn Sie möchten, dass Ihre Ausgabe von grep gefärbt wird (wie ich), dann cutzuerst und grepdann.
DerMike
Und ich habe einen Alias ​​in meine ~ / .bash_aliases-Datei eingefügt: alias cutt = 'cut -c - $ COLUMNS'. Jetzt kann ich nur noch puten ...
Samuel Lampa
1
Dies verhält sich schlecht, wenn die Ausgabe Registerkarten enthält. Irgendwelche Vorschläge? Eine Möglichkeit besteht darin, Tabulatoren zuerst in Leerzeichen zu konvertieren. Es wäre jedoch hilfreich, dies zu vermeiden, falls wir Tabulatoren für später in der Pipeline beibehalten möchten.
Aaron McDaid
2
Ich habe expanddie Antwort gefunden und bearbeitet, um sie aufzunehmen. Es korrigiert für Tab
Aaron McDaid
3

Sie können die Ausgabe mit zuschneiden cut. z.B

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

Dabei ${COLUMNS}wird die aktuelle Breite des Terminals angegeben. Mit dem resizeBefehl kann die aktuelle Breite neu generiert werden:

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

Wenn Sie dies automatisieren möchten, können Sie dies in einem Skript zusammenfassen nowrap:

#!/bin/bash

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

quelle
2

Und zusätzlich zu dem, was Nagul gesagt hat, können Sie es in bash verwenden:

tput cols

um die Breite zu erhalten:

SPALTEN = $ (tput cols)


quelle