Awk ficará bem. Uma maneira é:
$ echo -n "comment 1\rcomment 2\r...\rcomment n\r" > input.txt
$ cat input.txt | awk -v FS="" -v RS="" '{for (i=1;i<=32;i++) printf ($i == "\r")? "" : $i}' > output.txt
$ cat output.txt
comment 1comment 2...comment
Explicação: por padrão, o awk processa a entrada linha por linha, com uma única linha chamada registro ; cada linha processada coluna por coluna, com coluna única chamada campo . Cada campo é referido por variáveis que começam com 1, por ex. $ 1, $ 2, $ 3…
Assim, você altera o comportamento padrão configurando o eparador F ield S para ""
, fazendo com que o awk processe o material caractere por caractere. Então você ajusta R ecord S eparator para ""
, então você pode se referir a caracteres de todo o texto de uma só vez (isto é, sem escrever um código para lidar com coisas por linha) .
Finalmente, você pode facilmente operar em caracteres, então você faz um loop pelos campos (isto é, caracteres) , e imprime somente quando o caractere não é um retorno de carro.