用于将输出修剪到终端宽度的实用程序?

用于将输出修剪到终端宽度的实用程序?

当我做

ps aux

输出被很好地修剪到适合我的终端的宽度,因此较长的流程描述不会占用超过一行。但是,如果我将其传输到其他任何地方,长行又会恢复。

我意识到这是一种正确的行为,因为 ps 不再输出到 tty,而整个输出对于处理来说可能至关重要。我想要的是其他当我完成时,它将裁剪输出。

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

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

nowrap是我正在寻找的虚构工具。它将确保长行被裁剪并且不会溢出。

有这样的事吗?

答案1

您可以使用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

答案2

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} -

答案3

除了 nagul 所说的之外,您还可以在 bash 中使用:

输入列

获取宽度:

COLUMNS=$(输入列)

相关内容