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.