bash - 在 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 上运行,那就加分!
编辑:
我的输出(即列)的长度可能会因一些不同的因素而异,所以我更喜欢这样的解决方案,我不必手动指定要打印的空格数以使其看起来很漂亮。
解决方案
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 最大长度
推荐阅读
- stream - 关于组合档案的 2 个快速问题
- java - 如何在 Java 中拆分 URL
- laravel-5 - 使用 Summernote 在 Laravel 中动态内联附件
- c++ - 双重转换,从 uint16 到 int32 同时保持标志
- google-apps-script - Google 表单 - 导出 PDF 草稿和电子签名
- javascript - 变量值增量的问题
- java - 在这个例子中如何解决代码重复,我介绍了继承来实际解决代码重复
- typescript - 打字稿:多括号字段声明
- mysql - mysql PDO ON DUPLICATE KEY UPDATE 计算 + x
- xsd - 定义 complexContent 限制时出错