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

时间:2018-01-09 07:01:47

标签: regex unicode sed

我想在某些范围内删除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:无效的归类角色

2 个答案:

答案 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中的字符,不要翻译