Bash
阻止 bash 列印無效的 Unicode 序列
在 bash 中執行
echo -e "\uDDAA"
(這不是有效的 utf-8 程式碼點),列印���
.如果它不是有效的程式碼點,我怎樣才能讓它不列印任何東西?
我想做的是在NamesList.txt中的所有程式碼點前面添加它所代表的字元。現在我有它
sed -e 's/\<\([0-9A-F]\{4,6\}\)\>/\\U\1 \1/g' < NamesList.txt | while read -r line;do echo -e "$line"; done | sponge NamesList.txt
如果有更好的方法可以完全解決該問題,請發布該解決方案
您不應該首先創建這些序列。這將為控製字元 (
\pC
) 列印空格,並為標記 (\pM
) 提供一個可以騎乘的空間:perl -CO -pe 's{^([0-9A-F]+)\b}{$x=$1,$c=chr hex $x;if($c=~/\pC/){$c=" "}elsif($c=~/\pM/){$c=" $c"}"$c $x"}e' NamesList.txt
(
-i NamesList.txt
如果您想就地編輯文件,請使用)請參閱Unicode 字元屬性。您不想顯示的代理項、雙向標記和其他控制項位於“其他”類別 (
\pC
) 中。重音和其他組合標記屬於“標記”類別 (\pM
)。