+ -
当前位置:首页 → 问答吧 → 如何过滤中英文字符?

如何过滤中英文字符?

时间:2011-06-29

来源:互联网

有一个文件A, 它的每行都这样的格式: 'zhang'san张三, 中英文是连接在一起的.
请问: 这样过滤出英文字符和中文字符呢?

作者: 独孤毛毛   发布时间: 2011-06-29

回复 独孤毛毛


    这个?
  1. echo 'zhangsan张三' |awk '{print gensub(/[!-~]/,"","g",$0)}'
  2. 张三


  3. echo 'zhangsan张三' |awk '{print gensub(/[^!-~]/,"","g",$0)}'
  4. zhangsan
复制代码

作者: yinyuemi   发布时间: 2011-06-29

本帖最后由 where27 于 2011-06-29 11:15 编辑

如果只有中英文字符的话:
grep -o "[a-zA-Z]*" A
grep -o "[^a-zA-Z]*" A

作者: where27   发布时间: 2011-06-29

回复 yinyuemi


    老师 [!-~],这样就可以标记出中文吗?

作者: zooyo   发布时间: 2011-06-29



QUOTE:
回复  yinyuemi


    老师 [!-~],这样就可以标记出中文吗?
zooyo 发表于 2011-06-29 11:56




    ascii 码表顺序上, ! - ~ 基本就涵盖了全部可见字符了,这个编码之外的就是中文了(对这个例子而言)

作者: liion631818   发布时间: 2011-06-29

回复 zooyo


    ls坏孩子说的对,我也是借花献佛,呵呵
http://bbs.chinaunix.net/viewthr ... p;extra=&page=1

作者: yinyuemi   发布时间: 2011-06-29

回复 liion631818


    哈哈,谢谢坏小孩。

作者: zooyo   发布时间: 2011-06-29

回复 yinyuemi

刚查了手册,和搜索了论坛,明白了gensub()函数的用法.
并在机器上做了实验:
  1. echo 'zhangsan张三' | awk '{print gensub(/[!-~]/,"","g",$0)}'
复制代码
是可以得到中文字符的.
  1. echo 'zhangsan张三' | awk '{print gensub(/[^!-~]/,"","g",$0)}'
复制代码
是直接输出zhangsan张三

虽然明白了要过滤中英文字符是可以使用gensub()函数, 看这个函数有引发了新的问题: 不了解gensub()的正则表达规则.

呵呵,谢谢大家. 现在看正则规则去了.

作者: 独孤毛毛   发布时间: 2011-06-29

回复 where27

grep是一个行匹配工具, 会把符合匹配的行一起输出.

作者: 独孤毛毛   发布时间: 2011-06-29

回复 独孤毛毛


    grep [^\u4e00-\u9fa5]  来找中文

作者: 南极雨   发布时间: 2011-06-29