Use col -b
(no Linux ele faz parte do pacote util-linux; no sistema base em outro lugar).
col filters out reverse (and half-reverse) line feeds so the output is in the correct order, with only forward and half-forward line feeds.
Eu tenho um programa que executa alguns comandos em um terminal (por exemplo apt-get update
) e armazena a saída.
Como posso reinterpretar a saída para poder remover todas as informações desnecessárias?
Por exemplo, a saída bruta é (isso é apenas uma fração da saída):
Reading package lists... 0%
Reading package lists... 0%
Reading package lists... 1%
Reading package lists... 6%
Reading package lists... 6%
Reading package lists... 26%
Reading package lists... 32%
Reading package lists... 32%
Reading package lists... 39%
Reading package lists... 39%
Reading package lists... 53%
Reading package lists... 65%
Reading package lists... 65%
Reading package lists... 68%
Reading package lists... 68%
Reading package lists... 83%
Reading package lists... 84%
Reading package lists... 84%
Reading package lists... 86%
Reading package lists... 86%
Reading package lists... 88%
Reading package lists... 88%
Reading package lists... 90%
Reading package lists... 90%
Reading package lists... 92%
Reading package lists... 92%
Reading package lists... 93%
Reading package lists... 93%
Reading package lists... 94%
Reading package lists... 94%
Reading package lists... 95%
Reading package lists... 95%
Reading package lists... 96%
Reading package lists... 96%
Reading package lists... 97%
Reading package lists... 97%
Reading package lists... 98%
Reading package lists... 98%
Reading package lists... 99%
Reading package lists... 99%
Reading package lists... 99%
Reading package lists... 99%
Reading package lists... Done
e deve ser interpretado como quando você executa o comando normal no bash, sendo a saída final:
Reading package lists... Done
Você gravou a saída do comando em um terminal, então decidiu usar os recursos do terminal. Especificamente, apt-get
usa caracteres de retorno de carro para mover o cursor de volta para o início da linha atual e sobrescrever o texto que estava na linha.
Para emular o efeito de retornos de carro, remova todo o texto antes de um:
<transcript sed 's/.*\r//'
Se você quiser apenas gravar a saída e não exibi-la para um usuário, use o redirecionamento em vez de script
ou algo semelhante. Então, apt-get
exibirá texto simples.