Nik*_*und 8 colors escape-characters table columns text-formatting
我正在为表格的标题着色 column -ts $'\t'
在没有颜色代码的情况下效果很好,但是当我将颜色代码添加到第一行时column
,输出无法正确对齐。
没有彩色输出它按预期工作:
printf "1\t2\t3\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'
但是在第一行列上添加颜色时,不会与彩色行的文本对齐:
printf "\e[7m1\t2\t3\e[0m\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'
在 Ubuntu Linux 和 Mac OS X 上都观察到了这种行为。
是的,那是因为颜色代码也被格式化column
。他们就像任何其他角色一样。既然你已经在使用printf
了,你不妨用它来为你做格式化:
$ printf '\e[7m%-24s%-8s%-6s\e[0m\n%-24s%-8s%-6s\n' "1" "2" "3" "asdasdasdasdasdasdasd" "qwe" "qweqwe"
1 2 3
asdasdasdasdasdasdasd qwe qweqwe
Run Code Online (Sandbox Code Playgroud)
或者,您可以在使用后添加颜色代码column
:
$ printf "1\t2\t3\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t' |
sed "1{s/^/$(printf '\e[7m')/;s/$/$(printf '\e[0m')/}"
1 2 3 # this line is colored
asdasdasdasdasdasdasd qwe qweqwe
Run Code Online (Sandbox Code Playgroud)
我想它column
不知道这\e[7m
是一个在输出中不占用空间的 v100 转义序列。似乎假设八进制字符代码 0 到 037 不占用空格。您可以通过将初始转义序列放在其自己的行上,然后从输出中删除该换行符来获得所需的内容:
printf '\e[7m\n1\t2\t3\e[0m\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n' |
column -ts $'\t' |
sed '1{N;s/\n//}'
Run Code Online (Sandbox Code Playgroud)