如何使用sed删除Unicode在某个范围内



我想删除某个范围内的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 中的字符,不翻译

相关内容

最新更新