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 tr
commande 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 file
et écrit le contenu modifié dans newfile
. L' -d
option permettant à tr
l'utilitaire de supprimer les caractères (au lieu de les translittérer) et de le -c
faire considérer les caractères en dehors de l'intervalle donné (au lieu de l'intérieur).
LC_ALL=C
s'assure que chaque valeur d'octet constitue un caractère valide. Sans cela, certaines tr
implé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 tr
terminé. Si tr
cela 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