【问题标题】:how to use sed delete Unicode in some range?如何在某个范围内使用 sed 删除 Unicode?
【发布时间】: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: 无效的排序规则

【问题讨论】:

标签: regex unicode sed


【解决方案1】:

不确定为什么sed 不起作用,但您可以改用tr

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


来自man tr

tr - 翻译或删除字符

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

【讨论】:

    【解决方案2】:

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

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

    在此处使用-CS 标志非常重要,以便能够为输入/输出/错误获得正确的 UTF8 编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      相关资源
      最近更新 更多