Утиліта для обрізки виходу до ширини клеми?


12

Коли я це роблю

ps aux

Вихід добре прирізається до ширини мого терміналу, так що довгі описи процесу не займають більше одного рядка. Однак якщо я вкладу це в щось інше, довгі лінії повертаються.

Я усвідомлюю, що це правильна поведінка, оскільки ps більше не виводиться на tty і весь вихід може бути вирішальним для обробки. Що я хочу - це ще одна утиліта, яка буде обрізати результат, коли я закінчу.

Я хочу вміти робити щось подібне:

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

nowrapце уявний інструмент, який я шукаю. Це забезпечить обрізання довгих рядків і не переповнення.

Чи є щось подібне?

Відповіді:


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

1
... і якщо ви хочете, щоб ваш результат був пофарбований grep (як я), ви cutспочатку і grepпотім.
DerMike

І я додав псевдонім у свій файл ~ / .bash_aliases: псевдонім 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)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.