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