ASCII-Zeichen sind Zeichen im Bereich von 0 bis einschließlich 177 (oktal) .
Verwenden Sie, um Zeichen außerhalb dieses Bereichs in einer Datei zu löschen
LC_ALL=C tr -dc '\0-\177' <file >newfile
Der tr
Befehl ist ein Dienstprogramm, das einzelne Zeichen bearbeitet , entweder durch andere einzelne Zeichen ersetzt (Transliteration), löscht oder Läufe desselben Zeichens zu einem einzelnen Zeichen komprimiert.
Der obige Befehl würde file
den geänderten Inhalt lesen und in ihn schreiben newfile
. Mit dieser -d
Option tr
löscht das Dienstprogramm Zeichen (anstatt sie zu transliterieren) und -c
berücksichtigt Zeichen außerhalb des angegebenen Intervalls (statt innerhalb).
LC_ALL=C
stellt sicher, dass jeder Byte-Wert ein gültiges Zeichen bildet. Ohne diese tr
Option würden einige Implementierungen abgebrochen, wenn Bytefolgen gefunden würden, die in der Zeichencodierung des Gebietsschemas keine gültigen Zeichen bilden.
Verwenden Sie, um die Originaldatei durch die geänderte zu ersetzen
LC_ALL=C tr -dc '\0-\177' <file >newfile &&
mv newfile file
Dadurch wird die neue Datei nach erfolgreichem Abschluss in den Namen der alten Datei umbenannt tr
. Wird der tr
Vorgang nicht erfolgreich abgeschlossen, da die ursprüngliche Datei nicht gelesen oder nicht in die neue Datei geschrieben werden konnte, bleibt die ursprüngliche Datei unverändert.
Um die Metadaten (Berechtigungen usw.) der Originaldatei so weit wie möglich zu erhalten, verwenden Sie alternativ
cp file tmpfile &&
LC_ALL=C tr -dc '\0-\177' <tmpfile >file &&
rm tmpfile