Еще одно решение - использовать strings
которые печатают только печатаемые символы из файла (или из стандартного ввода):
strings -n 1 filename
Опция -n 1
устанавливает минимальную длину последовательностей, которые должны быть сохранены, и, таким образом, гарантирует, что сохраняются даже отдельные печатаемые символы, окруженные непечатными символами.
Одним из возможных недостатков этого подхода является то, что strings
добавляют разрывы строк между смежными строками печатаемых символов. Например, файл с содержанием
Foo<SOMECONTROLCHAR>Bar
(где <SOMECONTROLCHAR>
является управляющим символом или любым другим непечатным символом) будет возвращено как
Foo
Bar
Другая проблема, поднятая в комментариях, состоит в том, что некоторые последовательности управляющих символов состоят из комбинации как печатных, так и непечатных символов, и этот подход удалит только часть из них.
Тем не менее, strings
отлично справляется с удалением управляющих символов, таких как backspace, упомянутый в вопросе