Czy chcesz przyciąć wyjście do szerokości terminala?

12

Kiedy robię

ps aux

Wyjście ładnie przycina się do szerokości mojego terminala, dzięki czemu długie opisy procesów nie zajmują więcej niż jednej linii. Jednak jeśli wpuszczę go w coś innego, powrócą długie linie.

Zdaję sobie sprawę, że jest to właściwe zachowanie, ponieważ ps nie jest już wyprowadzany do tty, a całe wyjście może być kluczowe dla przetwarzania. To, czego chcę, to kolejne użycie, które przywróci dane wyjściowe, gdy skończę.

Chcę być w stanie zrobić coś takiego:

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

nowrapto wyimaginowane narzędzie, którego szukam. Zapewni to przycięcie długich linii, a nie przepełnienie.

Czy jest coś takiego?

itsadok
źródło

Odpowiedzi:

15

Możesz użyć cutpolecenia, aby wyciąć dane wyjściowe. Na przykład:

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

Pozwoli to zachować tylko pierwsze 80 znaków każdej linii. Możesz oczywiście ustawić dowolną szerokość.

Jeśli używasz linii poleceń bash, możesz to zrobić:

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

Jeśli dane wyjściowe mają tabulatory, szerokość może być niepoprawnie obliczona. expandpotrafi zamieniać tabulatory w spacje:

ps aux | grep -v 'www-data' | expand | cut -c-$COLUMNS
retracile
źródło
1
... a jeśli chcesz, aby twój wynik był zabarwiony grep (tak jak ja), cutnajpierw, a greppotem.
DerMike,
I dodałem alias w moim pliku ~ / .bash_aliases: alias cutt = 'cut -c - $ COLUMNS'. Teraz mogę po prostu potoczyć do cięcia ...
Samuel Lampa
1
Zachowuje się to źle, jeśli na wydruku znajdują się tabulatory. Jakieś sugestie? Jedną z opcji jest najpierw konwersja tabulatorów na spacje, ale dobrze byłoby tego uniknąć, na wypadek gdybyśmy chcieli zachować tabulatory na później w potoku.
Aaron McDaid
2
Znalazłem expandi zredagowałem odpowiedź, aby ją uwzględnić. Poprawia tab
Aaron McDaid
3

Możesz przyciąć dane wyjściowe za pomocą cut. na przykład

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

gdzie ${COLUMNS}zapewnia bieżącą szerokość terminala. resizePolecenie to może być wykorzystywane do ponownego wygenerowania bieżącą szerokość:

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

Jeśli chcesz to zautomatyzować, możesz zawinąć w skrypt nowrap:

#!/bin/bash

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

źródło
2

Oprócz tego, co powiedział nagul, możesz użyć w bash:

tput cols

aby uzyskać szerokość:

KOLUMNY = $ (tput cols)


źródło