sed
non è configurato molto bene per il testo non ASCII. Tuttavia puoi usare (quasi) lo stesso codice in perl
e ottieni il risultato che desideri:
perl -pe 's/.*\| //' x
Penso che l'errore si verifichi se la codifica di input del file è diversa dalla codifica preferita del tuo ambiente.
Esempio:in
è UTF-8
$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X
Y
UTF-8 può essere tranquillamente interpretato come ISO-8859-1, otterrai strani caratteri ma a parte questo va tutto bene.
Esempio:in
è 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 non può essere interpretato come UTF-8, la decodifica del file di input non riesce. La strana corrispondenza è probabilmente dovuta al fatto che sed cerca di recuperare piuttosto che fallire del tutto.
La risposta è basata su Debian Lenny/Sid e sed 4.1.5.