我有一个变量“ x”,它包含两列和两行。我想用红色打印“ hi”,所以我使用了tput
,它以红色打印了结果。但是我也需要按照使用column -t
的方式正确对齐列,但是这会使输出失真。这是因为事实是,通过tput添加了一些控制字符。
x="hello $(tput setaf 1)hi $(tput sgr0) whatsup
hey howdy cya"
echo "$x"
hello hi whatsup
hey howdy cya
echo "$x"|column -t
hello hi whatsup
hey howdy cya
我期望:
hello hi whatsup
hey howdy cya
试图调试,发现tput正在添加一些控制字符以使“ hi”打印为红色。
echo "$x"|cat -A
hello ^[[31mhi ^[(B^[[m whatsup$
hey howdy cya$
问题:
如何在tput的彩色输出上“ column -t
”?
编辑:@Diego Torres Milano的结果(全部为红色)
hello 31mhi Bm whatsup
hey howdy cya
答案 0 :(得分:0)
您可以使用一种简化的标记,在这种情况下,将^A
用作红色(使用vim
输入 CTRL + v CTRL + a )
y="hello ^Ahi whatsup
hey howdy ya"
echo "$y"|column -t|sed -E "s@^A([[:alnum:]]+)@$(tput setaf 1)\1$(tput sgr0)@g"
并且输出符合预期(hi为红色):
hello hi whatsup
hey howdy ya
如果您的column
计算了控制字符,请使用未出现在值中的任何字符,然后替换它们,例如
y="|hello !hi |whatsup
|hey |howdy |ya"
echo "$y"|column -t|sed -E "s@\\|@@g; s@!([[:alnum:]]+)@$(tput setaf 1)\1$(tput sgr0)@g;"
产生