【发布时间】:2018-06-18 04:11:46
【问题描述】:
我想删除某个范围内的 Unicode,例如:
echo "abcABC123" | sed 's/[\uff21-\uff3b]//g'
期待"abc123",但得到:
sed: -e 表达式 #1, char 20: 无效范围结束
或使用:
echo "abcABC123" | sed 's/[A-Z]//g'
得到:
sed: -e expression #1, char 14: 无效的排序规则
【问题讨论】:
我想删除某个范围内的 Unicode,例如:
echo "abcABC123" | sed 's/[\uff21-\uff3b]//g'
期待"abc123",但得到:
sed: -e 表达式 #1, char 20: 无效范围结束
或使用:
echo "abcABC123" | sed 's/[A-Z]//g'
得到:
sed: -e expression #1, char 14: 无效的排序规则
【问题讨论】:
不确定为什么sed 不起作用,但您可以改用tr
$ echo 'abcABC123' | tr -d 'A-Z'
abc123
来自man tr
tr - 翻译或删除字符
-d, --delete 删除SET1中的字符,不要翻译
【讨论】:
sed 中的 Unicode 支持没有明确定义。你最好使用命令行perl:
echo "abcABC123" | perl -CS -pe 's/[\x{FF21}-\x{FF3B}]+//g'
abc123
在此处使用-CS 标志非常重要,以便能够为输入/输出/错误获得正确的 UTF8 编码。
【讨论】: