Les caractères ASCII sont des caractères compris entre 0 et 177 (octal) inclusivement .
Pour supprimer des caractères hors de cette plage dans un fichier, utilisez
LC_ALL=C tr -dc '\0-\177' <file >newfile
La trcommande est un utilitaire qui fonctionne sur des caractères uniques , soit en les remplaçant par d'autres caractères simples (translittération), soit en les supprimant, soit en compressant des séquences du même caractère en un seul caractère.
La commande ci-dessus lit fileet écrit le contenu modifié dans newfile. L' -doption permettant à trl'utilitaire de supprimer les caractères (au lieu de les translittérer) et de le -cfaire considérer les caractères en dehors de l'intervalle donné (au lieu de l'intérieur).
LC_ALL=Cs'assure que chaque valeur d'octet constitue un caractère valide. Sans cela, certaines trimplémentations seraient abandonnées si elles trouvaient des séquences d'octets qui ne forment pas de caractères valides dans le codage de caractères des paramètres régionaux.
Pour remplacer le fichier d'origine par le fichier modifié, utilisez
LC_ALL=C tr -dc '\0-\177' <file >newfile &&
mv newfile file
Cela renomme le nouveau fichier au nom de l'ancien fichier une fois trterminé. Si trcela ne se termine pas correctement, soit parce qu'il n'a pas pu lire le fichier d'origine ou ne pas écrire dans le nouveau fichier, le fichier d'origine restera inchangé.
Alternativement, pour conserver autant que possible les métadonnées (autorisations, etc.) du fichier d'origine, utilisez
cp file tmpfile &&
LC_ALL=C tr -dc '\0-\177' <tmpfile >file &&
rm tmpfile