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

5

我想在某些范围内删除Unicode字符,例如:

echo "abcABC123" | sed 's/[\uff21-\uff3b]//g'

期望结果是"abc123",但是得到的是:

sed:-e表达式#1,第20个字符:无效的范围结束

或者使用:echo "abcABC123" | sed 's/[A-Z]//g'

得到结果:

sed:-e表达式#1,第14个字符:无效的整理字符


1
请查看 https://ideone.com/woqDKM。另外,请查看 https://dev59.com/smoy5IYBdhLWcg3wa9Qj。 - Wiktor Stribiżew
2个回答

4

sed中的Unicode支持没有明确定义。您最好使用命令行perl

echo "abcABC123" | perl -CS -pe 's/[\x{FF21}-\x{FF3B}]+//g'

abc123

在这里使用-CS标志非常重要,以便能够获取正确的UTF8编码的输入/输出/错误信息。

1

不确定为什么sed无法工作,但可以使用tr代替

$ echo 'abcABC123' | tr -d 'A-Z'
abc123


来自 man tr

tr - 翻译或删除字符

-d, --delete 删除SET1中的字符,不进行翻译


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接