Emita o comando de coluna e os códigos de escape de cor

7

Estou colorindo o cabeçalho de uma tabela formatada com column -ts $'\t'

Funciona bem sem códigos de cores, mas quando adiciono códigos de cores à primeira linha, column não alinha corretamente a saída.

Sem saída colorida, funciona conforme o esperado :
printf "1\t2\t3\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'

Mas ao adicionar cores na primeira linha, a coluna não alinha o texto da linha colorida:
printf "\e[7m1\t2\t3\e[0m\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'

Observou esse comportamento no Ubuntu Linux e no Mac OS X.

    
por Niklas Berglund 27.12.2015 / 10:23

2 respostas

3

Eu imagino que column não saiba que \e[7m é uma seqüência de escape v100 que não ocupa espaço na saída. Parece que os códigos de caracteres 0 a 037 não ocupam espaço. Você pode obter o que deseja colocando a sequência de escape inicial em uma linha própria e removendo a nova linha da saída:

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

Sim, isso ocorre porque os códigos de cores também estão sendo formatados por column . Eles são personagens como qualquer outro. Como você já está usando printf , é melhor usá-lo para fazer a formatação para você:

$ 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

Como alternativa, você pode adicionar os códigos de cores após usando 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
    
por 27.12.2015 / 11:21