Bashが誤ったUnicodeシーケンスを印刷するのを防ぐ

Bashが誤ったUnicodeシーケンスを印刷するのを防ぐ

bashで実行されるとecho -e "\uDDAA"(有効なutf-8コードポイントではありません)���

有効なコードポイントでない場合は何も印刷しないようにするにはどうすればよいですか?



私がしたいことはすべてのコードポイントの前にあります名前リスト.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

問題を完全に解決するより良い方法がある場合は、解決策を投稿してください。

ベストアンサー1

最初からこれらのシーケンスを作成しないでください。これは、\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)に属します。

おすすめ記事