2013-02-22 15 views
5

Ich versuche, eine Textdatei zu manipulieren und Nicht-ASCII-Zeichen aus dem Text zu entfernen. Ich möchte die Linie nicht entfernen. Ich möchte nur die anstößigen Charaktere entfernen. Ich versuche, den folgenden Ausdruck zur Arbeit zu kommen:Versuche, nur Nicht-ASCII-Zeichen zu löschen

sed '/[\x80-\xFF]/d'

+1

Siehe [this] (http://stackoverflow.com/questions/3337936/remove-non-ascii-characters-from-csv) antworten. – speakr

+1

Dieser Thread könnte die Antwort haben, die Sie suchen http://stackoverflow.com/questions/8571601/skip-remove-non-ascii-character-with-sed – Ifthikhan

+0

Ihr Befehl löscht alle Zeilen, die nicht-ASCII-Zeichen enthalten. Wenn das nicht das ist, was Sie wollen, überprüfen Sie die doppelten Fragen –

Antwort

33

Die vorgeschlagenen Lösungen mit spezifischer Version von sed fehlschlagen können, beispielsweise GNU sed 4.2.1.

Mit tr:

tr -cd '[:print:]' < yourfile.txt 

Dadurch werden alle Zeichen, die nicht in [\x20-\x7e] entfernen.

Wenn Sie z.B. Zeilenvorschüben nur \n hinzufügen:

tr -cd '[:print:]\n' < yourfile.txt 

Wenn Sie wirklich alle ASCII-Zeichen (auch die Steuercodes) behalten möchten:

tr -cd '[:print:][:cntrl:]' < yourfile.txt 

Dies entfernt alle Zeichen nicht in [\x00-\x7f].

+1

Hey speakr, gibt es eine Möglichkeit, das Format der Textdatei beizubehalten. Der Befehl tr führt alles auf eine durchgehende Linie, richtig? –

+1

@bosra: Ich habe ein Beispiel hinzugefügt, um Zeilenvorschübe zu erhalten. – speakr

+0

Mann, wenn ich das noch ein paar Mal upvote könnte ich .. Danke –

Verwandte Themen