problema executando um script bash com codificação utf8

3

Eu tenho um script bash codificado em utf8.

Dentro do script, eu uso o comando sed usando § como separador.

Agora, quando eu executo, execute este script sed reclama do separador.

Se eu usar o caracter normal como separador para ex @ , tudo funcionará.

Eu vi o script em massa [set utf8 in putty] e o caractere parece bom.

Também o conjunto de caracteres padrão do Linux a partir do comando locale mostra

 LC_CSET=en_US.UTF-8 

O que poderia ter dado errado?

Antes eu costumava ter codificação windows-1252 para os scripts shell e isso costumava funcionar.

    
por Inv3r53 08.08.2011 / 23:36

1 resposta

6

Provavelmente, sua versão de sed não suporta caracteres de separação multibyte. Se você observar a maneira como § é codificado nos dois conjuntos de caracteres, verá a diferença:

% locale
LANG="en_CA.UTF-8"
LC_COLLATE="en_CA.UTF-8"
LC_CTYPE="en_CA.UTF-8"
LC_MESSAGES="en_CA.UTF-8"
LC_MONETARY="en_CA.UTF-8"
LC_NUMERIC="en_CA.UTF-8"
LC_TIME="en_CA.UTF-8"
LC_ALL=
% printf § > section.utf8
% hexdump -C section.utf8
00000000  c2 a7                                             |..|
00000002
% iconv -f UTF-8 -t WINDOWS-1252 < section.utf8 > section.win1252
% hexdump -C section.win1252
00000000  a7                                                |.|
00000001

Várias versões de sed fornecem mais ou menos mensagens úteis. No meu sistema OS X 10.6, eu fico um pouco enigmático:

% sed 's§foo§bar§' 
sed: 1: "s§foo§bar§": RE error: illegal byte sequence

A versão de sed que o Ubuntu 10.04 LTS usa é mais útil:

% sed 's§foo§bar§'
sed: -e expression #1, char 2: delimiter character is not a single-byte character
    
por 09.08.2011 / 01:38