sed
no está muy bien configurado para texto que no sea ASCII. Sin embargo, puedes usar (casi) el mismo código en perl
y obtenga el resultado que desea:
perl -pe 's/.*\| //' x
Creo que el error ocurre si la codificación de entrada del archivo es diferente de la codificación preferida de su entorno.
Ejemplo:in
es UTF-8
$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X
Y
UTF-8 se puede interpretar con seguridad como ISO-8859-1, obtendrá caracteres extraños, pero aparte de eso, todo está bien.
Ejemplo:in
es 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 no se puede interpretar como UTF-8, la decodificación del archivo de entrada falla. La coincidencia extraña probablemente se deba al hecho de que sed intenta recuperarse en lugar de fallar por completo.
La respuesta se basa en Debian Lenny/Sid y sed 4.1.5.