Text-Processing

col 產生不正確的輸出

  • June 17, 2018

我正在嘗試將輸出後處理script為更易讀的形式,類似於從腳本輸出中刪除控製字元(包括控制台程式碼/顏色),但我注意到這col並不總是有效。

例如,

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

為什麼不col -bp輸出bar呢?多餘的兩個os 是從哪裡來的?

^H在這種情況下是退格鍵,AKA 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

這是一個hacky解決方法:

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

  • :b: 標籤b
  • s,[^\x08]\x08,,g: 將非退格字元與退格字元配對並刪除兩者
  • tb: 如果前面的s指令做了什麼,就跳回 labelb

引用自:https://unix.stackexchange.com/questions/449209