Znaki ASCII to znaki z zakresu od 0 do 177 (ósemkowe) włącznie .
Aby usunąć znaki spoza tego zakresu w pliku, użyj
LC_ALL=C tr -dc '\0-\177' <file >newfile
tr
Polecenie to narzędzie, które działa na pojedynczych znaków , albo zastępując je innymi pojedynczych znaków (transliteracji), usuwając je lub ściskania serie tego samego znaku w jednej postaci.
Powyższe polecenie odczytuje file
i zapisuje zmodyfikowaną treść newfile
. -d
Opcja tr
sprawia użytkowych znaków Delete (zamiast nich transliteracji) i -c
sprawia, że pod uwagę znaki poza danym przedziale (zamiast wewnętrznej).
LC_ALL=C
upewnia się, że każda wartość bajtu stanowi poprawny znak. Bez tego niektóre tr
implementacje przerwałyby się, gdyby znalazły sekwencje bajtów, które nie tworzą prawidłowych znaków w kodowaniu znaków ustawień regionalnych.
Aby zastąpić oryginalny plik zmodyfikowanym, użyj
LC_ALL=C tr -dc '\0-\177' <file >newfile &&
mv newfile file
Spowoduje to zmianę nazwy nowego pliku na nazwę starego pliku po tr
pomyślnym zakończeniu. Jeśli tr
nie zakończy się pomyślnie, ponieważ nie można odczytać oryginalnego pliku lub nie zapisać do nowego pliku, oryginalny plik pozostanie niezmieniony.
Alternatywnie, aby zachować jak najwięcej metadanych (uprawnień itp.) Oryginalnego pliku, użyj
cp file tmpfile &&
LC_ALL=C tr -dc '\0-\177' <tmpfile >file &&
rm tmpfile