Sử dụng để cắt đầu ra chiều rộng thiết bị đầu cuối?


12

Khi tôi làm

ps aux

Đầu ra được cắt tỉa gọn gàng theo chiều rộng của thiết bị đầu cuối của tôi, để các mô tả quá trình dài không mất nhiều hơn một dòng. Tuy nhiên, nếu tôi đặt nó vào bất cứ thứ gì khác, các hàng dài sẽ quay trở lại.

Tôi nhận ra đây là một hành vi đúng đắn, vì ps không còn xuất ra một tty nữa và toàn bộ đầu ra có thể rất quan trọng để xử lý. Những gì tôi muốn là một tiện ích khác sẽ cắt đầu ra trở lại khi tôi hoàn thành.

Tôi muốn có thể làm một cái gì đó như thế này:

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

nowraplà công cụ tưởng tượng mà tôi đang tìm kiếm. Nó sẽ đảm bảo các dòng dài được cắt và không tràn.

Có một cái gì đó như thế này?

Câu trả lời:


15

Bạn có thể sử dụng cutlệnh để cắt đầu ra. Ví dụ:

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

Điều này sẽ chỉ giữ 80 ký tự đầu tiên của mỗi dòng. Tất nhiên bạn có thể đặt nó thành bất kỳ chiều rộng nào bạn muốn.

Nếu sử dụng dòng lệnh bash, bạn có thể làm điều này:

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

Nếu đầu ra có các tab, thì chiều rộng có thể không được tính toán chính xác. expandcó thể biến các tab thành khoảng trắng:

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

1
... và nếu bạn muốn đầu ra của bạn được tô màu bởi grep (như tôi làm), cuttrước tiên bạn grephãy thực hiện.
DerMike

Và tôi đã thêm một bí danh trong tệp ~ / .bash_aliases của mình: alias cutt = 'cut -c - $ COLUMNS'. Bây giờ tôi chỉ có thể cắt ống để cắt ...
Samuel Lampa

1
Điều này sai nếu có các tab trong đầu ra. Bất kỳ đề xuất? Một tùy chọn là chuyển đổi các tab thành không gian trước tiên, nhưng sẽ tốt hơn nếu tránh điều này, trong trường hợp chúng tôi muốn bảo tồn các tab cho sau này trong đường ống.
Aaron McDaid

2
Tôi tìm thấy expandvà chỉnh sửa câu trả lời để bao gồm nó. Nó sửa cho tab
Aaron McDaid

3

Bạn có thể cắt đầu ra bằng cách sử dụng cut. ví dụ

ps phụ | grep -v 'www-data' | cắt -c1 - $ {COLUMNS}

nơi ${COLUMNS}cung cấp chiều rộng hiện tại của thiết bị đầu cuối. Các resizelệnh có thể được sử dụng để tái tạo độ rộng hiện tại:

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

Bạn có thể, nếu bạn muốn tự động hóa điều này, hãy gói nó trong một tập lệnh nowrap:

#!/bin/bash

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

2

Và ngoài những gì nagul nói, bạn có thể sử dụng trong bash:

cols

để có được chiều rộng:

COLUMNS = $ (cols cols)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.