Colors

列命令和顏色轉義碼問題

  • December 27, 2015

我正在為格式化為的表格的標題著色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不知道這\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//}'

是的,那是因為顏色程式碼也被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

或者,您可以在使用添加顏色程式碼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

引用自:https://unix.stackexchange.com/questions/251751