Các ký tự ASCII là các ký tự trong phạm vi từ 0 đến 177 (bát phân) .
Để xóa các ký tự bên ngoài phạm vi này trong một tệp, sử dụng
LC_ALL=C tr -dc '\0-\177' <file >newfile
Các tr
lệnh là một tiện ích hoạt động trên ký tự đơn , hoặc thay thế chúng với các nhân vật khác duy nhất (phiên âm), xóa chúng, hoặc nén chạy của nhân vật tương tự thành một nhân vật duy nhất.
Lệnh trên sẽ đọc từ file
và ghi nội dung đã sửa đổi vào newfile
. Các -d
tùy chọn để tr
làm cho tiện ích ký tự xóa (thay vì chuyển ngữ chúng), và -c
làm cho nó xem xét nhân vật bên ngoài khoảng thời gian nhất định (thay vì bên trong).
LC_ALL=C
đảm bảo rằng mỗi giá trị byte tạo thành một ký tự hợp lệ. Nếu không có nó, một số tr
triển khai sẽ hủy bỏ nếu họ tìm thấy chuỗi byte không tạo thành các ký tự hợp lệ trong mã hóa ký tự của miền địa phương.
Để thay thế tệp gốc bằng tệp đã sửa đổi, hãy sử dụng
LC_ALL=C tr -dc '\0-\177' <file >newfile &&
mv newfile file
Điều này đổi tên tệp mới thành tên của tệp cũ sau khi tr
đã hoàn thành thành công. Nếu tr
không hoàn thành thành công, vì nó không thể đọc tệp gốc hoặc không ghi vào tệp mới, tệp gốc sẽ được giữ nguyên.
Ngoài ra, để bảo tồn càng nhiều càng tốt dữ liệu meta (quyền, v.v.) của tệp gốc, hãy sử dụng
cp file tmpfile &&
LC_ALL=C tr -dc '\0-\177' <tmpfile >file &&
rm tmpfile