+ -
当前位置:首页 → 问答吧 → 求解释:关于一条sed命令去掉中文字符

求解释:关于一条sed命令去掉中文字符

时间:2011-02-25

来源:互联网

昨天看到黑哥的一条命令

%s/[^ -~]//g

功能是在vim下去掉文中的汉字,很奇怪命令应该是把不包含空格、-、~的字符去掉的啊?
那结果应该是中文、英文字母全被干掉, -~字符保留啊?
现在的结果是英文字母没被干掉,中文的确被干掉了?

哪位高人能解释下这个命令是如何去掉中文而保留其它字符的呢?

作者: xrzs1986   发布时间: 2011-02-25

回复 xrzs1986


    真巧啊,很久不来了,一上来就看到我以前的帖子(我记不清了)。

   就是字符类啊,看看ascii,你就明白了。

作者: blackold   发布时间: 2011-02-25

标题不对吧,是vim命令,不是sed命令吧。

作者: blackold   发布时间: 2011-02-25

回复 blackold


    多谢黑哥回复~
不过我还是不明白 [^ -~] 怎么成字符类了?
字符类不是下面这些吗?
还有这个命令和ascii有什么关系呢?按sed的模式匹配来理解的话就是把不是空格、横杠、波浪线的其他所有字符删掉啊?但疑惑的是结果却不是这样的。。。
[:alnum:]
                文字数字字符
                [:alpha:]
                文字字符
                [:digit:]
                数字字符
                [:graph:]
                非空字符(非空格、控制字符)
                [:lower:]
                小写字符
                [:cntrl:]
                控制字符
                [:print:]
                非空字符(包括空格)
                [:punct:]
                标点符号
                [:space:]
                所有空白字符(新行,空格,制表符)
                [:upper:]
                大写字符
                [:xdigit:]

作者: xrzs1986   发布时间: 2011-02-25

回复 blackold


    恩,确实,不过vim下的这些替换命令好像和sed没什么大的区别,我一直就这么理解下来了{:3_189:}

作者: xrzs1986   发布时间: 2011-02-25

回复 xrzs1986


    你上面说的是命名字符类,还有一种是“自定义"的字符类,如[7-9]等等。

   字符类肯定与编码有关啊。

作者: blackold   发布时间: 2011-02-25

本帖最后由 南极雨 于 2011-02-25 11:09 编辑

说说我的理解.允许拍砖,不许打脸
这个....
正则表达式中 [] 内的代表一个字符,[^ -~] 代表行首不是 空格 到 ~ 之间的字符(应该是这样的,lz可能理解错吧, “-”的含义?)查ASCII码,应该是32-126之间的字符,测试一下.....


我擦 ....结果 。。。。结果就是TMD中文、英文字母全被干掉, ~字符保留啊

作者: 南极雨   发布时间: 2011-02-25

热门下载

更多