Я решил опубликовать вопрос, потратив довольно много времени и до сих пор не выяснив проблему. Также прочитайте кучу, казалось бы, связанных сообщений, ни один из которых не подходит для моей простой (?) проблемы.
Итак, у меня есть, возможно, большой текстовый файл (> 1000 строк), содержащий китайские символы, с примерной строкой, например:
"ref#2-5-1.jpg#2#一些 <variable> 内容#pic##" (the Chinese just means "some content").
Все, что нужно изменить, это то, что между каждым символом должен быть вставлен пробел, если его еще нет:
"ref#2-5-1.jpg#2#一 些 <variable> 内 容#pic##".
Я наивно начал с простых вещей, таких как следующие, но совпадений нет вообще:
sed -e 's/\([\u4E00-\u9fff]\)/\1 /g' <test_utf_sed.txt > test_out.txt
где 4E00-9fff должны быть кодовым диапазоном китайского языка. Неудивительно, что это не сработало, поэтому я тоже хотел попробовать
sed -e 's/\([一-龻]\)/hello/g' <test_utf_sed.txt > test_out.txt
Это не удалось, потому что мой bash не может отображать (?) символ «一».
Затем я провел базовый тест, который также не удался:
sed -e 's/\(\u4E00\)/hello/g' <test_utf_sed.txt > test_out.txt //一
sed -e 's/\(\u4E9B\)/hello/g' <test_utf_sed.txt > test_out.txt //些
То же самое с другим обозначением для кодировки utf (найдено здесь в stackoverflow):
sed -e 's/\(\u'U+4E00\)/hello/g' <test_utf_sed.txt > test_out.txt
1) Является ли sed правильным выбором в качестве инструмента для работы с двухбайтовыми символами?
2) Способен ли sed вообще обрабатывать юникод, или мне нужен специальный переключатель?
3) Я не ищу обходное решение, подобное этому:
step1: insert space after each character
//like 's/\(.\)/\1 /g')
step2: remove space after each chacter which is not a Chinese character
//like 's/\([a-zA-Z0-9]\) /\1/g')
Я знаю, как это сделать, но это неэлегантно и подвержено ошибкам. Это должно быть возможно с использованием utf-8 в регулярном выражении в sed.
4) Моя среда — bash-3.2 на MacOS 10.6.8 (старая ОС).
5) Если вы знаете какие-либо указатели на некоторые открытые regEx-onliners в качестве библиотеки, работающей с китайским текстом или обработкой языка, было бы здорово поделиться.
Заранее большое спасибо, ваша помощь очень ценится!