col produz saída incorreta

2

Estou tentando pós-processar a saída de script em um formato mais legível, semelhante a Removendo caracteres de controle (incluindo códigos / cores do console) da saída do script , mas notei que col nem sempre funciona.

Por exemplo,

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

Por que a col -bp não exibe apenas bar ? Onde estão os dois o s adicionais?

    
por Jeffrey 12.06.2018 / 00:32

2 respostas

2

^H neste caso é backspace, AKA dec / hex 8 ou oct 10 ou \b . Tudo o que está fazendo é mover o cursor; Veja este exemplo:

$ printf 'bravoX'
braXo

Nós movemos o cursor de volta 2, mas escrevemos apenas uma letra, a v . Nós não escrevemos sobre o o , então ele permanece. Se você quiser se livrar do resto das letras, você tem que substituí-las por algo, geralmente um caractere de espaço:

$ printf 'bravoX '
braX

link

    
por 12.06.2018 / 00:47
0

Aqui está uma solução alternativa:

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

  • :b : rótulo b
  • s,[^\x08]\x08,,g : Emparelhar um caractere de não-retrocesso com um caractere de retrocesso e remover ambos
  • tb : se a diretiva s anterior fez alguma coisa, retorne ao rótulo b
por 12.06.2018 / 01:53