I caratteri ASCII sono caratteri compresi nell'intervallo da 0 a 177 (ottale) .
Per eliminare caratteri al di fuori di questo intervallo in un file, utilizzare
LC_ALL=C tr -dc '\0-\177' <file >newfile
Il tr
comando è un'utilità che funziona su singoli caratteri , sostituendoli con altri caratteri singoli (traslitterazione), eliminandoli o comprimendo le esecuzioni dello stesso carattere in un singolo carattere.
Il comando sopra dovrebbe leggere file
e scrivere il contenuto modificato in newfile
. L' -d
opzione per tr
fare in modo che l'utilità elimini i caratteri (invece di trasletterli), e li -c
fa considerare caratteri al di fuori dell'intervallo dato (invece che all'interno).
LC_ALL=C
si assicura che ogni valore di byte costituisca un carattere valido. Senza di essa, alcune tr
implementazioni si interrompono se trovassero sequenze di byte che non formano caratteri validi nella codifica dei caratteri della locale.
Per sostituire il file originale con quello modificato, utilizzare
LC_ALL=C tr -dc '\0-\177' <file >newfile &&
mv newfile file
Ciò rinomina il nuovo file con il nome del vecchio file dopo che tr
è stato completato correttamente. Se tr
non viene completato correttamente, sia perché non è stato possibile leggere il file originale o non è possibile scrivere nel nuovo file, il file originale verrà lasciato invariato.
In alternativa, per conservare il più possibile i metadati (permessi, ecc.) Del file originale, utilizzare
cp file tmpfile &&
LC_ALL=C tr -dc '\0-\177' <tmpfile >file &&
rm tmpfile