col 产生不正确的输出

col 产生不正确的输出

我正在尝试将输出后处理script为更易读的形式,类似于从脚本输出中删除控制字符(包括控制台代码/颜色),但我注意到这col并不总是有效。

例如,

$ cat -v uncolored 
foo^H^H^Hbfoo^H^H^Hafoo^H^H^Hr^M
$ col -bp < uncolored
baroo

为什么不直接col -bp输出bar?多余的两个os 从哪里来?

答案1

^H在本例中是退格键,又称为 dec/hex 8 或 oct 10 或\b.它所做的只是移动光标;举个例子:

$ printf 'bravo\10\10X'
braXo

我们已将光标移回 2,但我们只写了一个字母,即v.我们没有重写o,所以它仍然存在。如果你想删除其余的字母,你必须用一些东西覆盖它们,通常是空格字符:

$ printf 'bravo\10\10X '
braX

http://wikipedia.org/wiki/Backspace#%5eH

答案2

这是一个巧妙的解决方法:

sed -re ':b; s,[^\x08]\x08,,g; tb'

  • :b: 标签b
  • s,[^\x08]\x08,,g:将非退格字符与退格字符配对并删除两者
  • tb:如果前一个s指令做了什么,则跳回标签b

相关内容