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

标签 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 上运行,那就加分!

编辑 :

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

最佳答案

echocolumn非常适合在命令行中破解。

pretty-print 的最佳实践通常涉及 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 最大长度

关于bash - 在 macOS 和 CentOS 上使用 'column -t',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56084828/

相关文章:

linux - 否定 bash 脚本中的 if 条件

linux - 回显到没有换行的文件

c++ - 在 OSX 10.11.4 + clang 上抛出异常导致 SIGSEGV

security - 是否有任何特殊字符可以使在 bash 中打印/显示文件名变得危险?

linux - CRON 作业未在指定时间运行

swift - SpriteKit : stuck trying to use SKNode. contains() 缩放 Sprite

swift - 在 NSVisualEffectView 中使用自定义 NSTableRowView 时出现奇怪的文本颜色

apache - (13) 权限被拒绝 : httpd: could not open error log file Unable to open logs

centos - 从文件目录创建 RPM

mysql - 重置root用户密码后无法在CentOS 7上重启MySQL