【发布时间】:2019-05-14 11:11:39
【问题描述】:
我想在漂亮的表格中打印一些文本。 举个例子:
{
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 上运行,那就加分!
编辑:
我的输出(即列)的长度可能会因一些不同的因素而有所不同,因此我更喜欢这样的解决方案,我不必手动指定要打印的空格数以使其看起来更漂亮。
【问题讨论】:
-
我认为问题与终端有关,而不是与操作系统有关。如果终端被编程或配置为将制表符显示为四个空格,它将产生第二个输出。
-
@oguzismail,即使在使用
tabs -n设置制表位后,我也会得到类似的结果,其中n是一些自然数。值得注意的是,macOS 是我的本地操作系统(使用终端),我通过 SSH 连接到 CentOS 主机。 -
如果从每个回显字符串的前面删除
\ts 会发生什么?如果有帮助,您可以随时在column之后添加| sed 's/^/\t/'以将它们重新添加。 -
@EdMorton,在
column命令有效之后添加选项卡!但是,我可以看到在不同的用例中,可能不希望在命令块的 everything 输出之前添加选项卡。此外,Mac 上的sed不喜欢\t转义序列。你必须使用 control-v,然后点击 tab 来插入一个文字标签。 -
@EdMorton,这在两个平台上都有效(仅针对此评论缩短为单行):
echo -e "IP address:-1.2.3.4\nNetmask:-1.2.3.4\nGateway:-1.2.3.4\nDefault gateway:-1.2.3.4" | column -ts- | sed s/^/$'\t'/。