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