看起来 head 和 sed 将颜色代码视为实际字符。如何从输入中获取前 n 个实际可见的字符?
答案1
可能不是很高效,但是使用 GNU awk
,您可以执行以下操作:
gawk -v RS='\033\\[[;[:digit:]]{0,16}[[:alpha:]]|.' -v ORS= -v count=123 '
{n += RT ~ /^[[:print:]]$/}; n > count {exit}; {print RT}'
(其中count
是您想要获取的字符数)。
请注意,虽然head -c
计算的是数量字节,以上计算的数量人物。
我们只考虑控制字符,如换行符、回车符或制表符,以及转义序列,格式如下:\e[123;123x
如颜色字符(其中x
is m
)或光标定位字符(其中x
is H
)。