我有一个用utf8编码的bash脚本。
在脚本中,我使用sed命令使用§
作为分隔符。
现在当我运行执行此脚本sed
抱怨分隔符。
如果我使用正常字符作为ex @
的分隔符,那么一切正常。
我已经在腻子中看到脚本[在putty中设置utf8],字符显示正常。
另外从locale
命令显示的Linux默认字符集显示
LC_CSET=en_US.UTF-8
可能出了什么问题?
早些时候,我曾经有shell脚本windows-1252编码,这用于工作。
可能您的sed
版本不支持多字节分隔符。 如果你看§
在两个字符集中编码的方式,你会看到不同之处:
% 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
各种版本的sed
会给你或多或less有用的消息。 在我的OS X 10.6系统上,我有点神秘:
% sed 's§foo§bar§' sed: 1: "s§foo§bar§": RE error: illegal byte sequence
Ubuntu 10.04 LTS使用的sed
版本更有帮助:
% sed 's§foo§bar§' sed: -e expression #1, char 2: delimiter character is not a single-byte character