Я думаю, что ошибка возникает, если входная кодировка файла отличается от предпочтительной кодировки вашей среды.
Пример: in
- это UTF-8
$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X
Y
UTF-8 можно смело интерпретировать как ISO-8859-1, вы получите странные символы, но кроме этого все в порядке.
Пример: 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 нельзя интерпретировать как UTF-8, декодирование входного файла завершается неудачно. Странное совпадение, вероятно, связано с тем, что sed пытается восстановиться, а не полностью потерпеть неудачу.
Ответ основан на Debian Lenny / Sid и sed 4.1.5.