Vấn đề với lệnh cột và mã thoát màu


7

Tôi đang tô màu tiêu đề của một bảng được định dạng bằng column -ts $'\t'

Hoạt động tốt mà không cần mã màu, nhưng khi tôi thêm mã màu vào dòng đầu tiên columnsẽ không căn chỉnh đúng đầu ra.

Không có đầu ra màu, nó hoạt động như mong đợi :
printf "1\t2\t3\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'

Nhưng khi thêm màu trên cột dòng đầu tiên sẽ không căn chỉnh văn bản của hàng màu:
printf "\e[7m1\t2\t3\e[0m\nasdasdasdasdasdasdasd\tqwe\tqweqwe\n" | column -ts $'\t'

Đã quan sát hành vi này cả trên Ubuntu Linux và Mac OS X.

Câu trả lời:


3

Tôi tưởng tượng rằng columnkhông biết đó \e[7mlà một chuỗi thoát v100 không có không gian trong đầu ra. Dường như giả sử mã ký tự 0 đến 037 bát phân không có khoảng trắng. Bạn có thể có được những gì bạn muốn bằng cách đặt chuỗi thoát ban đầu trên một dòng của riêng nó, sau đó xóa dòng mới đó khỏi đầu ra:

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

Cảm ơn! Bạn đúng. Ngoài ra, sử dụng màu sắc trong một số cột của các hàng khác nơi giải pháp thay thế dòng mới này sẽ không hoạt động, nhưng tôi sẽ giải quyết vấn đề đó với phương pháp @terdon đề xuất.
Niklas Berglund

5

Vâng, đó là bởi vì các mã màu cũng đang được định dạng column. Họ là những nhân vật giống như bất kỳ ai khác. Vì bạn đã sử dụng printfmặc dù, bạn cũng có thể sử dụng nó để thực hiện định dạng cho bạn:

$ 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

Ngoài ra, bạn có thể thêm mã màu sau khi sử dụng 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

Có, chúng là các ký tự, nhưng không phải là ký tự tab mà tôi đã chỉ định là dấu phân cách :) Không muốn sử dụng printf để chỉ định độ dài, muốn tạo các cột bằngcolumn
Niklas Berglund

@NiklasBerglund có nhưng không có điểm nào trong việc sử dụng tab vì columnlệnh của bạn sẽ xóa nó.
terdon

@NiklasBerglund cũng thấy câu trả lời cập nhật. Bạn có thể thêm màu sau khi sử dụng cột và tránh sự cố.
terdon

Cảm ơn. Tôi muốn sử dụng columnvì một số cột có chiều rộng động. Ý tưởng tuyệt vời để thêm màu sắc sau khi sử dụng column👍
Niklas Berglund
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.