Pourquoi sed échoue avec les caractères internationaux et comment réparer?
GNU sed version 4.1.5 semble échouer avec l'International caractères. Voici mon fichier d'entrée:
Gras Och Stenar Trad - De Moja à Minneapolis DVD [G2007DVD] 7812 | X
Gras Och Stenar Trad - De Möja à Minneapolis DVD [G2007DVD] 7812 | Y
(Notez le tréma en deuxième ligne.)
Et quand je ne
sed 's/.*| //"< dans
Je m'attends à voir seulement les X et Y, comme je l'ai demandé d'enlever TOUS les caractères jusqu'à la '|' et de l'espace au-delà. Au lieu de cela, je reçois:
X
Gras Och Stenar Trad - De M? Y
Je sais que je peux utiliser tr retirer le International caractères. tout d'abord, mais est-il un moyen d'utiliser sed?
source d'informationauteur Dave
Vous devez vous connecter pour publier un commentaire.
Je pense que l'erreur se produit si l'entrée de l'encodage du fichier est différent de l'encodage préféré de votre environnement.
Exemple:
in
est UTF-8UTF-8 peuvent en toute sécurité être interprété comme ISO-8859-1, vous obtiendrez des personnages étranges, mais à part ça, tout va bien.
Exemple:
in
est ISO-8859-1ISO-8859-1 ne peut être interprété comme de l'UTF-8, le décodage du fichier d'entrée échoue. L'étrange correspondance est probablement dû au fait que sed tente de récupérer plutôt que d'échouer complètement.
La réponse est basée sur Debian Lenny/Sid et sed 4.1.5.
sed
n'est pas très bien le programme d'installation pour les non-ASCII. Cependant, vous pouvez utiliser (presque) le même code dansperl
et obtenir le résultat que vous souhaitez: