Я хочу удалить все управляющие символы из моего файла с помощью команд linux bash.
Есть некоторые управляющие символы, такие как EOF (0x1A), особенно вызывающие проблему при загрузке моего файла в другое программное обеспечение. Я хочу удалить это.
Вот что я пробовал до сих пор:
это отобразит все управляющие символы:
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%$
Здесь будут перечислены все управляющие символы с помощью grep:
$ cat file.txt | head -n 10 | grep '[[:cntrl:]]'
+
1
-
-
1
%
-
.
/
соответствует указанному выше выводу команды cat.
Теперь я выполнил следующую команду, чтобы показать все строки, не содержащие управляющие символы, но он все еще показывает тот же вывод, что и выше (строки с управляющими символами)
$ cat file.txt | head -n 10 | grep '[^[:cntrl:]]'
+
1
-
-
1
%
-
.
/
Вот результат в шестнадцатеричном формате:
$ 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
как вы можете видеть, шестнадцатеричные значения, 0x01, 0x18 являются управляющими символами.
Я попытался использовать команду tr для удаления управляющих символов, но получил ошибку:
$ 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.
Если я удалю все управляющие символы, я также удалю также новую строку и возврат каретки, который используется в качестве символов новой строки в окнах. Как удалить все управляющие символы, содержащие только те, которые требуются как "\ r\n"?
Спасибо.