GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum schlägt sed mit internationalen Zeichen fehl und wie kann man das beheben?

sed ist nicht sehr gut für Nicht-ASCII-Text eingerichtet. Sie können jedoch (fast) denselben Code in perl verwenden und erhalten Sie das gewünschte Ergebnis:

perl -pe 's/.*\| //' x

Ich denke, der Fehler tritt auf, wenn sich die Eingabecodierung der Datei von der bevorzugten Codierung Ihrer Umgebung unterscheidet.

Beispiel:in ist UTF-8

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

UTF-8 kann getrost als ISO-8859-1 interpretiert werden, man bekommt seltsame Zeichen, aber ansonsten ist alles in Ordnung.

Beispiel:in ist ISO-8859-1

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Gras Och Stenar Trad - From MöY
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

ISO-8859-1 kann nicht als UTF-8 interpretiert werden, die Dekodierung der Eingabedatei schlägt fehl. Die seltsame Übereinstimmung ist wahrscheinlich darauf zurückzuführen, dass sed versucht, sich zu erholen, anstatt vollständig zu versagen.

Die Antwort basiert auf Debian Lenny/Sid und sed 4.1.5.


Linux
  1. Bash =~ Regex und Https://regex101.com/?

  2. Ssh – Warum schlägt der X11-Weiterleitungsversuch mit „connect /tmp/.x11-unix/x0:No Such File Or Directory“ fehl?

  3. Wie verwende ich sed, um meine Konfigurationsdateien mit flexiblen Schlüsseln und Werten zu ändern?

  4. Installieren Sie Binärdateien in /bin, /sbin, /usr/bin und /usr/sbin, Interaktionen mit --prefix und DESTDIR

  5. Wie kann ich Gnome daran hindern, Dokumente/Videos/in HOME zu erstellen?

Was ist der Grep-Befehl unter Linux? Warum wird es verwendet und wie funktioniert es?

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

So ersetzen Sie mehrere Leerzeichen durch einen Tabulator

Wie kann man Zeichen rekursiv durch sed ersetzen?

So richten Sie passwortloses SSH mit RSA-Schlüsseln ein

Wie benenne ich alle Dateien mit Sonderzeichen und Leerzeichen in einem Verzeichnis um?