2014-11-21 26 views
5

Ich habe den folgenden Befehl, um Unicode-Zeichen durch ASCII-Zeichen zu ersetzen.So ersetzen Sie Unicode-Zeichen durch ASCII

sed -i 's/Ã/A/g' 

Das Problem ist à nicht durch den sed Befehl in meiner Unix-Umgebung erkannt wird, damit ich Sie es mit seinem hexadezimalen Wert ersetzen würde annehmen. Wie würde die Syntax aussehen, wenn ich stattdessen C3 verwenden würde?

ich diesen Befehl als Vorlage für andere Zeichen verwende ich möchte mit Leerzeichen ersetzen, wie zum Beispiel:

sed -i ‚s/©// g‘

+0

meinst du das? http://stackoverflow.com/questions/22450563/sed-matching-unicode-block-with – Leo

+1

Welchen Zeichensatz verwendet Ihr Terminal? Und welche Codierung verwendet der Eingabetext? Ã in UTF-8 ist 0xC3 0x83, und Zeichen 0x83 ist ein Steuercode in ISO 8859-1, also könnte das ein Problem sein. Ich nehme an, Sie können "LANG = en_US.UTF-8" nicht einfach auf Ihrem System einstellen. – yellowantphil

+0

"sed" wird den Job machen. Bitte sehen Sie meine Antwort. – ajaaskel

Antwort

2

Sie verwenden können iconv:

iconv -f utf-8 -t ascii//translit 
+3

Sie meinen GNU iconv. Nicht alle Versionen von iconv unterstützen die Transliteration. –

+1

Ja, aber er kann es versuchen – tinySandy

+0

Danke, aber ich benutze dies als Vorlage, um andere sed-Befehle zu erstellen, die bestimmte Zeichen durch Leerzeichen ersetzen, zum Beispiel: sed -i 's/©// g' –

9

Es ist möglich, Hexwerte in "sed" zu verwenden.

echo "Ã" | hexdump -C 
00000000 c3 83 0a           |...| 
00000003 

Ok, das Zeichen ist zwei Byte Kombination "C3 83". Lassen Sie uns ersetzen Sie es mit Single-Byte "A":

echo "Ã" |sed 's/\xc3\x83/A/g' 
A 

Erläuterung: \ x für "sed" zeigt an, dass ein Hex-Code folgt.

+0

Normalerweise würde ich diese mit <<< schreiben, aber Piping gibt einem durchschnittlichen Leser eine bessere Vorstellung davon, was vor sich geht. – ajaaskel

+0

Was meinst du "schreibe sie mit <<<"? – isomorphismes

+1

hexdump -C <<< Ö – ajaaskel

3

Try LANG=C Einstellung und dann über den Unicode-Bereich läuft:
echo "hi ☠ there ☠" | LANG=C sed "s/[\x80-\xFF]//g"

3

Es gibt auch uconv, von ICU.

Beispiele:

  • uconv -x "::NFD; [:Nonspacing Mark:] > ; ::NFC;": Akzente
  • uconv -x "::Latin; ::Latin-ASCII;" zu entfernen: für eine Umschrift Latin/ascii
  • uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;": für eine Umschrift Latin/ascii und Beseitigung der noch verbleibenden Codepunkte> 0x7F
  • ...

echo "À l'école ☠" | uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;" gibt: A l'ecole

Verwandte Themen