Символи ASCII - це символи в діапазоні від 0 до 177 (восьмери) включно .
Щоб видалити символи поза цим діапазоном у файлі, використовуйте
LC_ALL=C tr -dc '\0-\177' <file >newfile
trКоманда утиліта , яка працює на холостих символів , або замінити їх з іншими одиночними символами (транслітерації), їх видалення або стиснення пробіги одного і того ж символу в один символ.
Команда вище буде читати fileі записувати змінений вміст у newfile. -dОпція trробить утиліту видалення символів (замість транслітерації їх), і -cробить його розглядати символи поза заданого інтервалу (замість внутрішнього).
LC_ALL=Cгарантує, що кожне байтне значення містить дійсний символ. Без нього деякі trреалізації припинять, якби вони знайшли послідовності байтів, які не утворюють дійсних символів в кодуванні символів локалі.
Щоб замінити оригінальний файл модифікованим, використовуйте
LC_ALL=C tr -dc '\0-\177' <file >newfile &&
mv newfile file
Він перейменовує новий файл на ім'я старого файлу після trуспішного завершення. Якщо trвін не завершиться успішно, або тому, що він не зміг прочитати оригінальний файл або не записати у новий файл, вихідний файл залишиться незмінним.
Як варіант, щоб зберегти якомога більше метаданих (дозволів тощо) вихідного файлу, використовуйте
cp file tmpfile &&
LC_ALL=C tr -dc '\0-\177' <tmpfile >file &&
rm tmpfile