Используется для обрезки вывода до ширины терминала?

12

Когда я делаю

ps aux

Вывод корректно обрезается по ширине моего терминала, поэтому длинные описания процессов не занимают более одной строки. Однако, если я отправлю это во что-то еще, длинные строки вернутся.

Я понимаю, что это правильное поведение, так как ps больше не выводит tty, и весь вывод может иметь решающее значение для обработки. Что я хочу, так это еще одна утилита, которая обрежет вывод обратно, когда я закончу.

Я хочу быть в состоянии сделать что-то вроде этого:

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

nowrapэто воображаемый инструмент, который я ищу. Это гарантирует, что длинные строки будут обрезаны и не переполнены.

Есть ли что-то подобное?

itsadok
источник

Ответы:

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
retracile
источник
1
... и если вы хотите, чтобы ваш вывод был окрашен grep (как я), cutсначала вы, а grepзатем.
DerMike
И я добавил псевдоним в мой файл ~ / .bash_aliases: alias cutt = 'cut -c - $ COLUMNS'. Теперь я могу просто трубку, чтобы вырезать ...
Сэмюэль Лампа
1
Это ведет себя неправильно, если в выводе есть вкладки. Какие-либо предложения? Один из вариантов - сначала преобразовать вкладки в пробелы, но было бы неплохо избежать этого, если мы хотим сохранить вкладки для дальнейшего использования.
Аарон МакДейд
2
Я нашел expandи отредактировал ответ, чтобы включить его. Это исправляет для вкладки
Аарон МакДейд
3

Вы можете обрезать вывод, используя cut. например

PS Aux | grep -v 'www-data' | cut -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)


источник