GNU/Linux >> Znalost Linux >  >> Linux

Proč selže sed s mezinárodními znaky a jak to opravit?

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.


Linux
  1. Proč nefunguje find -exec mv {} ./target/ +?

  2. Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

  3. Proč git selže při push/fetch s příliš mnoha otevřenými soubory

  1. Kdy mám použít /dev/shm/ a kdy /tmp/?

  2. Jak nahradit více mezer jedním tabulátorem

  3. Jak rekurzivně nahradit znaky sed?

  1. Jak nastavit ssh bez hesla pomocí klíčů RSA

  2. Jak Linux používá /dev/tty a /dev/tty0

  3. Proč se připojení připojení souboru po odpojení nezdaří pomocí ENOENT?