更改“cat”命令的选项卡大小

更改“cat”命令的选项卡大小

当我进入时,vim我可以使用以下命令更改选项卡大小:

:set ts=4

是否也可以设置cat命令输出的制表符大小?

答案1

第一个命令在这里模仿您在 中看到的格式vim。它基于每 4 列的制表符停止 (ts) 设置,智能地将制表符扩展到同等数量的空格。

printf "ab\tcd\tde\n" |expand -t4   

输出

ab  cd  de

为了保持选项卡作为选项卡并有选项卡停止位置设置为每 4 列,那么您必须更改环境使用 tab-char 的方式(就像 vim 使用命令一样:set ts=4

例如,在终端中,您可以设置选项卡停止使用此命令变为 4;

tabs 4; printf "ab\tcd\tde\n" 

输出

ab  cd  de

答案2

只需使用以下代码:

tabs -n

其中 n 是您希望制表符对应的空格数。为了不必每次启动 shell 时都执行此操作,只需编辑.bash_profilein~/并将以上行添加到文件末尾即可。

有关 tabs 命令的更多信息,请参阅:

man tabs

答案3

;中没有制表符或制表符停止位的概念cat。该程序只是将输入汇集到输出,并将制表符视为任何其他字符。如果输出设备恰好是终端,则选项卡将根据终端配置提供的任何行为进行处理。

实现 POSIX.1 的系统有一个名为 的命令,tabs(1)该命令将调整终端如何显示选项卡的概念。取决于特定的选项卡布局并不被认为是一个好主意,因为有人可能会将您的文件发送到其他设备,例如无法执行您预期操作的打印机。

当您调整tsin vim(或 plain vi)时,您所做的只是调整编辑器在显示时解释制表符的方式。它与文件中的最终内容无关。

答案4

要扩展已经给出的答案,expand还可以获取制表位位置列表。如果各个列的内容长度变化很大,这非常有用。

今天,当我想让输出openssl ciphers更具可读性时,我遇到了这个要求:

$ openssl ciphers -v 'HIGH'|tr -s ' ' '\t'|expand -t31,41,57,70,90
ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2   Kx=ECDH         Au=RSA       Enc=AESGCM(256)     Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2   Kx=ECDH         Au=ECDSA     Enc=AESGCM(256)     Mac=AEAD
ECDHE-RSA-AES256-SHA384        TLSv1.2   Kx=ECDH         Au=RSA       Enc=AES(256)        Mac=SHA384
ECDHE-ECDSA-AES256-SHA384      TLSv1.2   Kx=ECDH         Au=ECDSA     Enc=AES(256)        Mac=SHA384
...
ECDH-ECDSA-AES128-SHA          SSLv3     Kx=ECDH/ECDSA   Au=ECDH      Enc=AES(128)        Mac=SHA1
AES128-GCM-SHA256              TLSv1.2   Kx=RSA          Au=RSA       Enc=AESGCM(128)     Mac=AEAD
AES128-SHA256                  TLSv1.2   Kx=RSA          Au=RSA       Enc=AES(128)        Mac=SHA256
AES128-SHA                     SSLv3     Kx=RSA          Au=RSA       Enc=AES(128)        Mac=SHA1

CAMELLIA128-SHA                SSLv3     Kx=RSA          Au=RSA       Enc=Camellia(128)   Mac=SHA1
PSK-AES128-CBC-SHA             SSLv3     Kx=PSK          Au=PSK       Enc=AES(128)        Mac=SHA1

使用 onlyexpand -t31会将输出的宽度从大约 100 个字符扩大到超过 160 个字符。

相关内容