首页 > 解决方案 > 在 macOS 和 CentOS 上使用 'column -t'

问题描述

我想在漂亮的表格中打印一些文本。举个例子:

{
    echo -e "\tIP address:-1.2.3.4"
    echo -e "\tNetmask:-1.2.3.4"
    echo -e "\tGateway:-1.2.3.4"
    echo -e "\tDefault gateway:-1.2.3.4"
} | column -ts-

在 macOS(对我来说是 10.14.4)上,打印结果与我预期的一样:

    IP address:       1.2.3.4
    Netmask:          1.2.3.4
    Gateway:          1.2.3.4
    Default gateway:  1.2.3.4

然而,在 CentOS 上(在 6 和 7 上测试过),它就不是那么漂亮了:

    IP address:   1.2.3.4
    Netmask:   1.2.3.4
    Gateway:   1.2.3.4
    Default gateway:   1.2.3.4

所以我的问题是:有没有更好的方法我应该这样做?至少对于 CentOS?

如果您能告诉我为什么它可以在 macOS 上运行但不能在 CentOS 上运行,那就加分!

编辑

我的输出(即列)的长度可能会因一些不同的因素而异,所以我更喜欢这样的解决方案,我不必手动指定要打印的空格数以使其看起来很漂亮。

标签: bashmacoscentos

解决方案


echo并且column非常适合在命令行中破解。

漂亮打印的最佳实践通常包括printf

IPv4=('IP address:' 1.2.3.4 Netmask: 1.2.3.4 Gateway: 1.2.3.4 Default\ gateway: 1.2.3.4)
ip=; for ip in "${IPv4[@]}"; do ((${#ip} > max)) && max=${#ip}; done
printf "\t%-$((max+2))s%s\n" "${IPv4[@]}"

\t%-18s%s\n表示“文字制表符,字符串填充到 18 个字符,字符串,换行符”。它包含两个参数说明符%x,bash 将为所有参数回收它们。

注意:多词元素必须被引用或转义它们的空格才能被单独处理

编辑:添加了 flexbile 最大长度


推荐阅读