列コマンドとカラーエスケープコードに関する問題

列コマンドとカラーエスケープコードに関する問題

書式設定されたテーブルヘッダーに色を付けています。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の両方で観察されました。

ベストアンサー1

はい、カラーコードにもフォーマットされているからです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

おすすめ記事