sed
n'est pas très bien configuré pour le texte non-ASCII. Cependant vous pouvez utiliser (presque) le même code en perl
et obtenez le résultat souhaité :
perl -pe 's/.*\| //' x
Je pense que l'erreur se produit si l'encodage d'entrée du fichier est différent de l'encodage préféré de votre environnement.
Exemple :in
est UTF-8
$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X
Y
UTF-8 peut être interprété en toute sécurité comme ISO-8859-1, vous obtiendrez des caractères étranges mais à part cela, tout va bien.
Exemple :in
est 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 ne peut pas être interprété comme UTF-8, le décodage du fichier d'entrée échoue. La correspondance étrange est probablement due au fait que sed essaie de récupérer plutôt que d'échouer complètement.
La réponse est basée sur Debian Lenny/Sid et sed 4.1.5.