Как вставить символ UTF-16 с помощью sed в файл? - PullRequest
0 голосов
/ 13 января 2020

У меня есть файл с кодировкой 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 в виде запятой, то есть 002 c:

sed -i "s/./&\U002c/400...

или даже

s/./&$(echo -ne '\u002c')/400...

Ни один из этих параметров не сработал, результаты точно такие же как в варианте 1.

1 Ответ

0 голосов
/ 13 января 2020

Проблема не в вставке нового символа с помощью sed.

Я заметил, что это файл UTF-16LE (я предполагал, что это был UTF-16BE). Я конвертировал его непосредственно в ascii с помощью

iconv -f UTF-16LE -t ASCII sourcefile >destinationfile

, и после этого я мог обрабатывать файл как обычно с помощью sed, grep, awk, et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...