我想在某些范围内删除Unicode,例如:
echo "abcABC123" | sed 's/[\uff21-\uff3b]//g'
期待"abc123"
,但得到:
sed:-e expression#1,char 20:无效范围结束
或使用:
echo "abcABC123" | sed 's/[A-Z]//g'
得到:
sed:-e expression#1,char 14:无效的归类角色
答案 0 :(得分:3)
sed
中的Unicode支持定义不明确。您可能最好使用命令行perl
:
echo "abcABC123" | perl -CS -pe 's/[\x{FF21}-\x{FF3B}]+//g'
abc123
在此处使用-CS
标志非常重要,以便能够为输入/输出/错误获取正确的UTF8编码。
答案 1 :(得分:1)
不确定为什么sed
无效,但您可以使用tr
代替
$ echo 'abcABC123' | tr -d 'A-Z'
abc123
来自man tr
tr - 翻译或删除字符
-d, - 删除 删除SET1中的字符,不要翻译