GNU/Linux >> Linux Esercitazione >  >> Linux

Perché sed fallisce con i caratteri internazionali e come risolverlo?

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.


Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Ssh - Perché il tentativo di inoltro X11 non riesce con "connect /tmp/.x11-unix/x0:No Such File Or Directory"?

  3. Perché /bin/sh punta a /bin/dash e non a /bin/bash??

  4. Perché find -exec mv {} ./target/ + non funziona?

  5. Come posso utilizzare sed per modificare i miei file di configurazione, con chiavi e valori flessibili?

Che cos'è il comando Grep in Linux? Perché viene utilizzato e come funziona?

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Come sostituire in modo ricorsivo i caratteri con sed?

Come configurare ssh senza password con chiavi RSA

Come rinominare tutti i file con caratteri speciali e spazi in una directory?

Perché il binding del montaggio di un file dopo lo scollegamento non riesce con ENOENT?