Colors
當文本著色時,“column”的輸出未對齊
我有一個 tcsh 腳本中的句子列表,它們由 ‘\n’ 分隔,並且裡面可能有空格。我想以 ls 的風格展示它們,所以我做了“echo $list| column”。當沒有使用顏色時它工作正常。結果如下
然後我需要突出顯示每次出現的一些更改的項目(最新的 3 個選項)。我在要突出顯示的項目周圍添加顏色序列(\e[33m 和 \e[0m),然後仍然將它們放入 $ list. When I show them with “echo $ 列表 | 列”,顏色還可以,但文字錯位如下圖。
注意,我試過如果不使用 ‘| column’,字元串在一列中正確顯示,即使不是我想要的樣式。
這個問題有什麼解決辦法嗎?
順便說一句,我做了一些搜尋,這似乎是列的錯誤。專欄有維護者嗎?我應該在哪里報告問題?
注意:在發布之前,我已經閱讀了列命令和顏色轉義碼的問題。他的格式是固定的,而我的彩色項目是動態的。所以簡單地使用 printf 或在列後添加顏色是行不通的
不理解為輸出著色的轉義序列
column
,它僅通過計算輸入中的“可列印字元”來操作。例如,將文本變為綠色 (^[[0;32m
) 的序列包含六個可列印字元,並且將按此計算。如果您想查看
column
確定列寬時真正看到的內容,請嘗試以下操作:ls --color=always / | tr -dc '\n -~' | column -s '\n'
如果您不支持此選項,請替換
ls --color=always /
為任何具有彩色輸出的命令。ls
無法說服
column
忽略這些轉義序列,但您可以在之後添加顏色。假設您有一個
to-list
如下所示的文件:1: avifsc01 2: avifsh01_bg4dtva0f 3: avifsh01_bg5dtvz1f 4: bg2ctqz1 5: bg2dtva0 6: bg3cda0 7: bg3cda1 8: bg3cdpa0 9: bg3z1 10: bg4cdpa0f 11: bg4cdpz1f 12: bg4cdz1f 13: bg4cta0f 14: bg4ctpa0f 15: bg4ctpz1f 16: bg4ctz1f 17: bg4dtva0f 18: bg4dtvz1f 19: bg5ctpz1f 20: bg5ctz1f 21: bg5dtvz1f 22: bg6ctz1f 23: bgpk01 24: dsc 25: test 26: vpp01 27: vrdlib01
然後你做:
list=$(cat to-list)
假設您知道要為一些特定條目著色:
to_color='bg3cda0 bg4dtva0f bg6ctz1f'
column
您可以在著色之前格式化列表:printf '%s\n' "${list}" \ | column -s '\n' \ | sed "s@$( (printf '%s\\|' ${to_color}; echo) \ | sed 's@^@\\([0-9][0-9]*: \\(@' \ | sed 's@\\|$@\\)\\)@' \ )@$(printf '\033')[33m\1$(printf '\033')[0m@g"
只要您有某種方法可以生成這兩個變數(
${list}
和${to_color}
),就可以動態生成這些條目。結果: