You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用column命令格式化高亮文本时Oracle Linux 8.5对齐异常求助

问题原因

问题核心是两个系统的column工具版本差异:Ubuntu使用的是较新版本的util-linux包中的column,它会自动忽略ANSI转义字符(颜色代码)的宽度;而Oracle Linux 8.5中的column版本较旧,会把\x1b[1;46m和\x1b[0m这类颜色转义序列当作普通字符计算宽度,直接破坏了第5行的对齐逻辑。

解决方案

方案1:调整管道顺序(最简单有效)

先让column处理纯文本完成对齐,再用sed给指定行添加颜色,这样颜色代码不会影响已计算好的对齐宽度:

echo -e "Name|Age|Gender|Height|Weight
John|25|Male|180|75.5
Jane|30|Female|165|55.2
Bob|45|Male|175|85.1
Alice|35|Female|170|62.3
Dave|50|Male|185|92.8
Eve|40|Female|160|50.7
Tom|28|Male|175|70.5
Sue|42|Female|160|58.9
Mike|33|Male|190|81.2" | column -t -s $'|' -o $' | ' -R 2,4,5 | sed -E '5s/^(.*)$/\x1b[1;46m\1\x1b[0m/'

方案2:用awk替代(更灵活可控)

如果需要更精确的格式控制,可以用awk一次性完成对齐和上色,完全规避column的版本差异:

echo -e "Name|Age|Gender|Height|Weight
John|25|Male|180|75.5
Jane|30|Female|165|55.2
Bob|45|Male|175|85.1
Alice|35|Female|170|62.3
Dave|50|Male|185|92.8
Eve|40|Female|160|50.7
Tom|28|Male|175|70.5
Sue|42|Female|160|58.9
Mike|33|Male|190|81.2" | awk -F'|' '
BEGIN {
    # 定义各列宽度(可根据实际内容调整)
    col1_w=12; col2_w=4; col3_w=7; col4_w=6; col5_w=6
    fmt_normal = "%-" col1_w "s | %" col2_w "s | %-" col3_w "s | %" col4_w "s | %" col5_w "s\n"
    fmt_highlight = "\033[1;46m%-" col1_w "s | %" col2_w "s | %-" col3_w "s | %" col4_w "s | %" col5_w "s\033[0m\n"
}
NR==5 {
    printf fmt_highlight, $1, $2, $3, $4, $5
    next
}
{
    printf fmt_normal, $1, $2, $3, $4, $5
}
'
验证思路

可以在两个系统分别执行column --version查看版本差异:Ubuntu的column通常来自util-linux 2.35+,而Oracle Linux 8.5的版本多为util-linux 2.32,旧版本不支持忽略ANSI转义字符宽度的特性。

内容的提问来源于stack exchange,提问作者outon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:47:45