Você tem que limpar essas fugas enquanto as lê - faça o que o terminal faz e sobrescreva-as.
Isso emula a saída que você descreve com seq
:
seq -s "
$(printf '3[A')" 10
Se for gravada em um terminal que interpreta essa saída, aparecerá apenas 10
. Mas, como você nota na pergunta, é realmente imprimir todos esses números um sobre o outro. No entanto, se eu filtrar sua saída com sed
like:
seq -s "
$(printf '3[A')" 10 |
sed -e :n -e "\$!N;s/.*$(printf '3\[A')//;tn"
... ele realmente imprime apenas 10
porque sed
continuamente lê em cada linha de entrada seguinte e s///
substitui tudo da cabeça do espaço padrão até a última ocorrência chave para cima escape. E cada vez que o faz com sucesso, ele volta ao :n
label para t
ry novamente.