有用,可以将输出修整为端子宽度吗?


12

当我做

ps aux

输出被很好地调整为终端的宽度,因此较长的过程描述不会占用多于一行。但是,如果我通过管道将其插入其他任何内容,则会返回长行。

我意识到这是一个正确的行为,因为ps不再输出到tty,并且整个输出对于处理至关重要。我想要的是另一个 util,可以在完成后裁剪输出。

我希望能够做这样的事情:

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

nowrap是我在寻找的假想工具。这将确保长行被裁剪并且不会溢出。

有这样的东西吗?

Answers:


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文件中添加了一个别名:alias cutt ='cut -c-$ COLUMNS'。现在我可以用烟斗割草了……
塞缪尔·兰帕2014年

1
如果在输出中有选项卡,则会出现异常。有什么建议?一种选择是先将制表符转换为空格,但是最好避免这种情况,以防万一我们希望保留制表符供以后在管道中使用。
亚伦·麦克戴德

2
我找到expand并编辑了答案,将其包括在内。它会更正制表符
Aaron McDaid 2014年

3

您可以使用裁剪输出cut。例如

ps aux | grep -v'www-data'| 切-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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.