我想删除某个范围内的Unicode,例如:
echo "abcABC123" | sed 's/[uff21-uff3b]//g'
期望"abc123"
,但得到:
sed:-e 表达式 #1,字符 20:无效范围结束
或使用:
echo "abcABC123" | sed 's/[A-Z]//g'
获取:
sed:-e 表达式 #1,字符 14:排序规则字符无效
sed
中的Unicode支持没有很好的定义。最好使用命令行perl
:
echo "abcABC123" | perl -CS -pe 's/[x{FF21}-x{FF3B}]+//g'
abc123
在此处使用-CS
标志非常重要,以便能够为输入/输出/错误获取正确的 UTF8 编码。
不确定为什么sed
不起作用,但您可以使用tr
$ echo 'abcABC123' | tr -d 'A-Z'
abc123
从man tr
tr - 翻译或删除字符
-d, --删除 删除 SET1 中的字符,不翻译