sed
není příliš dobře nastaven pro text bez ASCII. Můžete však použít (téměř) stejný kód v perl
a získejte požadovaný výsledek:
perl -pe 's/.*\| //' x
Myslím, že k chybě dojde, pokud se vstupní kódování souboru liší od preferovaného kódování vašeho prostředí.
Příklad:in
je UTF-8
$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X
Y
UTF-8 lze bezpečně interpretovat jako ISO-8859-1, dostanete podivné znaky, ale kromě toho je vše v pořádku.
Příklad:in
je 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 nelze interpretovat jako UTF-8, dekódování vstupního souboru se nezdaří. Podivná shoda je pravděpodobně způsobena skutečností, že sed se spíše snaží zotavit, než úplně selhat.
Odpověď je založena na Debianu Lenny/Sid a sed 4.1.5.
Udělejte snímek obrazovky pomocí skriptu Python v systému Linux
Co znamená číslo v závorce uvedené za jmény příkazů Unix v manuálových stránkách?