【发布时间】:2020-01-13 14:54:10
【问题描述】:
我有一个编码为 UTF-16 的文件,我想将每一行拆分为用逗号分隔的字段(在固定位置)。 我尝试了以下方法:
选项 1)
sed -i 's/./&,/400;s/./&,/360;*<and so on for several positions in the line>* FILE
这似乎可行,但是用vim编辑文件时,很明显有问题,因为逗号显示为单个字符,而其他符号显示为两个字节字符。
BEFORE: 2^@A^@U^@W^@2^@0^@1^@9^@0^@1^@0^@1^@0^@0^@0^@1^@0^@0^@
AFTER: 2^@,A^@U^@,W^@,2^@0^@1^@9^@0^@1^@0^@1^@,0^@0^@0^@1^@0^@0^@,
选项 2)
然后我再次尝试使用sed,但是我输入了逗号的UTF-16代码,而不是“,”,即002c:
sed -i "s/./&\U002c/400...
甚至
s/./&$(echo -ne '\u002c')/400...
这些选项都不起作用,结果与选项1完全相同。
【问题讨论】:
-
请注意^@不是两个字符或字节,而是vi如何表示每个字符的UTF-16额外字节。如您所见,逗号字符由 vi 表示为单个字符“,”
-
难道你不能把它转换成 UTF-8(比如
iconv),执行你的修改,然后在你完成后将它转换回 UTF-16?更好的是,告诉 vim 正确的编码?