在macOS和CentOS上使用'column -t'

时间:2019-05-10 21:05:02

标签: bash macos centos

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

{
    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上运行,则奖励积分!

修改

我的输出(即列)的长度可能会有所不同,具体取决于一些不同的因素,因此,我希望使用一种无​​需手动指定要打印的空格数以使其看起来漂亮的解决方案。

1 个答案:

答案 0 :(得分:0)

echocolumn非常适合在命令行中使用。

最佳实践中,漂亮的打印通常涉及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将为所有参数循环使用。

注意:多词元素必须加引号或转义其空格,以便将其单独对待

编辑:添加了灵活的最大长度