Bash

阻止 bash 列印無效的 Unicode 序列

  • February 12, 2020

在 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)。

引用自:https://unix.stackexchange.com/questions/566542