Removendo caracteres de controle de um arquivo

Eu quero apagar todos os caracteres de controle do meu arquivo usando comandos bash do Linux.

Existem alguns caracteres de controle como EOF (0x1A) especialmente que estão causando o problema quando eu carregar meu arquivo em outro software. Eu quero apagar isso.

Aqui está o que eu tentei até agora:

isso listará todos os caracteres de controle:

cat -v -e -t file.txt | head -n 10

^A+^X$
^A1^X$
^D ^_$
^E-^D$
^E-^S$
^E1^V$
^F%^_$
^F-^D$
^F.^_$
^F/^_$
^F4EZ$
^G%$

Isto irá listar todos os caracteres de controle usando grep:

$ cat file.txt | head -n 10 | grep '[[:cntrl:]]'
+
1

-
-
1
%
-
.
/

corresponde à saída acima do comando cat.

Agora, eu corri o seguinte comando para mostrar todas as linhas que não contêm caracteres de controle, mas ainda está mostrando a mesma saída acima (linhas com caracteres de controle)

$ cat file.txt | head -n 10 | grep '[^[:cntrl:]]'
+
1

-
-
1
%
-
.
/

aqui está a saída no formato hexadecimal:

$ cat file.txt | head -n 10 | grep '[[:cntrl:]]' | od -t x2
0000000 2b01 0a18 3101 0a18 2004 0a1f 2d05 0a04
0000020 2d05 0a13 3105 0a16 2506 0a1f 2d06 0a04
0000040 2e06 0a1f 2f06 0a1f
0000050

Como você pode ver, os valores hexadecimais, 0x01, 0x18 são caracteres de controle.

Eu tentei usar o comando tr para excluir os caracteres de controle, mas recebi um erro:

$ cat file.txt | tr -d "\r\n" "[:cntrl:]" >> test.txt
tr: extra operand `[:cntrl:]'
Only one string may be given when deleting without squeezing repeats.
Try `tr --help' for more information.

Se eu excluir todos os caracteres de controle, acabarei excluindo também a linha e o retorno de carro, que são usados ​​como caracteres de nova linha nas janelas. Como excluo todos os caracteres de controle mantendo apenas os necessários como "\ r \ n"?

Obrigado.

questionAnswers(4)

yourAnswerToTheQuestion