Une autre solution consiste à utiliser strings
qui n'imprime que les caractères imprimables d'un fichier (ou de l'entrée standard) :
strings -n 1 filename
Les -n 1
fixe à un la longueur minimale des séquences à préserver et garantit ainsi que même les caractères imprimables simples entourés de caractères non imprimables sont préservés.
L'inconvénient de cette approche est que strings
ajoute des sauts de ligne entre des chaînes contiguës de caractères imprimables. Par exemple, un fichier dont le contenu est
Foo<SOMECONTROLCHAR>Bar
(où <SOMECONTROLCHAR>
est un caractère de contrôle ou tout autre caractère non imprimable) serait renvoyée sous la forme de
Foo
Bar
Un autre problème soulevé dans les commentaires est que certaines séquences de caractères de contrôle sont constituées d'une combinaison de caractères imprimables et non imprimables et que cette approche ne supprimerait qu'une partie d'entre eux.
Cependant, strings
permet de supprimer les caractères de contrôle tels que l'espacement arrière mentionné dans la question.