2013-11-20 54 views
1

我有一個包含單詞,數字和Unicode字符混合的大文本文件。我想打印這個(目前的計劃是用TeX),但是我在處理長序列的字符時遇到了麻煩。用正則表達式和sed插入Unicode

我打算用bash使用sed來翻譯文件,並用相同的運行和零寬度空間(U + 200B)代替多於10個非空白字符的運行。我無法將Unicode字符放入,其他所有內容似乎都是按順序排列的。

longStr=reeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeealylongstr 
echo $longStr | sed -re 's/(\S{10})/\1\u200b/g' 

產生

reeeeeeeee200beeeeeeeeee200beeeeeeeeee200beeeeeeeeee200beeeealylon200bgstr 

什麼是用這種方式來通過插入代碼點Unicode字符的正確方法?

回答

2

改爲使用UTF-8字節。

Google或iconv會告訴您,代碼點U+200B以UTF-8編碼爲0xE2 0x80 0x8B

longStr=reeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeealylongstr 
echo $longStr | sed -re 's/(\S{10})/\1\xE2\x80\x8B/g' 

注意,這些字符不終端呈現,因此,如果你只是把它粘貼到一個外殼,它會出現什麼也不做。