열 명령 및 색상 이스케이프 코드 관련 문제

열 명령 및 색상 이스케이프 코드 관련 문제

서식이 지정된 테이블 헤더에 색상을 지정하고 있습니다.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

답변2

나는 이것이 출력에서 ​​공간을 차지하지 않는 v100 이스케이프 시퀀스라는 column것을 모르는 것 같습니다 . \e[7m8진수 문자코드 0~037은 공백을 차지하지 않는 것으로 가정한 것으로 보인다. 초기 이스케이프 시퀀스를 자체 줄에 넣은 다음 출력에서 ​​해당 개행 문자를 제거하여 원하는 것을 얻을 수 있습니다.

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

답변3

다음 버전 v2.40부터유틸리티Linux/기둥다음에 포함된 텍스트를 처리합니다.Fe 이스케이프 시퀀스~에서ANSI 이스케이프 코드적절하게.

그리고이 변화, ANSI 시퀀스로 텍스트를 출력하는 프로그램은 다음 예와 같이 올바르게 처리됩니다.

$ tput cols
108

$ echo BEFORE; ls -1 --sort=time --color=always | head -n 19 | column
BEFORE
column-test.sh  test_enosys             test_pathnames
column-pr.md                    test_mkfds              test_sha1
tests                   test_uuid_namespace     lib
ansiescape-test.txt             test_tiocsti            test_md5
column                  test_sigreceive         test_byteswap
text-utils              test_sysinfo
column-old.c                    test_strerror

$ echo REFERENCE; ls -1 --sort=time --color=never | head -n 19 | column
REFERENCE
column-test.sh          text-utils              test_tiocsti            test_sha1
column-pr.md            column-old.c            test_sigreceive         lib
tests                   test_enosys             test_sysinfo            test_md5
ansiescape-test.txt     test_mkfds              test_strerror           test_byteswap
column                  test_uuid_namespace     test_pathnames

$ echo AFTER; ls -1 --sort=time --color=always | head -n 19 | column
AFTER
column-test.sh          text-utils              test_tiocsti            test_sha1
column-pr.md            column-old.c            test_sigreceive         lib
tests                   test_enosys             test_sysinfo            test_md5
ansiescape-test.txt     test_mkfds              test_strerror           test_byteswap
column                  test_uuid_namespace     test_pathnames

관련 정보