Символи 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