web-dev-qa-db-ja.com

列コマンドとカラーエスケープコードの問題

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の両方でこの動作が観察されました。

7
Niklas Berglund

columnは、\e[7mが出力にスペースをとらないv100エスケープシーケンスであることを知らないと思います。文字コード0から037の8進数はスペースを取らないと想定しているようです。最初のエスケープシーケンスを独自の行に配置し、その改行を出力から削除することで、必要なものを取得できます。

printf '\e[7m\n1\t2\t3\e[0m\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n' | 
column -ts $'\t' |
sed '1{N;s/\n//}'
3
meuh

はい、それはカラーコードも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を使用してカラーコードafterを追加することもできます。

$ 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
4
terdon