Problème avec la command de colonne et les codes d'échappement de couleur

Je colorise l'en-tête d'une table formatée avec la column -ts $'\t'

Fonctionne bien sans codes de couleur, mais quand j'ajoute des codes de couleur à la première column ligne n'aligne pas correctement la sortie.

Sans sortie colorée, il fonctionne comme prévu :
printf "1\t2\t3\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'

Mais lors de l'ajout de couleur sur la première ligne de la ligne n'aligne pas le text de la ligne de couleur:
printf "\e[7m1\t2\t3\e[0m\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'

Observé ce comportement à la fois sur Ubuntu Linux et Mac OS X.

    J'imagine que cette column ne sait pas que \e[7m est une séquence d'échappement v100 qui ne prend pas de place dans la sortie. Il semble que les codes de caractères 0 à 037 octal ne prennent pas de place. Vous pouvez get ce que vous voulez en mettant la séquence d'échappement initiale sur une ligne, puis en supprimant cette nouvelle ligne de la sortie:

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

    Oui, c'est parce que les codes de couleur sont également formatés par column . Ce sont des personnages comme les autres. Comme vous utilisez déjà printf , vous pouvez également l'utiliser pour effectuer le formatting:

     $ 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 

    Vous pouvez également append les codes de couleur après avoir utilisé la 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