LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1680|回复: 8

awk正则匹配中文

[复制链接]
发表于 2006-3-24 16:37:27 | 显示全部楼层 |阅读模式
一个大约100万行的文件,
向找出那些不包含中文的行。
grep '^[a-zA-Z0-9]+$' file.list
结果匹配出很多中文行。
比如

用awk结果也是一样的。
linux 7.*
怎么回事?
发表于 2006-3-24 22:19:44 | 显示全部楼层
awk  '/^[a-z0-9[:space:]]+$/{ print $0 }' file.list
回复 支持 反对

使用道具 举报

发表于 2006-3-25 13:57:16 | 显示全部楼层
  1. '/^[a-zA-Z0-9~!@#$%^&*()_+`;":<>,./?|\\      ]+$/{ print $0 }'
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-26 17:34:48 | 显示全部楼层
Post by linux_now
  1. '/^[a-zA-Z0-9~!@#$%^&*()_+`;":<>,./?|\\      ]+$/{ print $0 }'
复制代码

用这个可以吗?我试过了,在我的机器上不行,还是会出来汉字。
我看了一下locale,是 en_US
会不会和这个有关系阿?把LANG改成zh_CN.gb2312还是不行。
回复 支持 反对

使用道具 举报

发表于 2006-3-26 22:55:18 | 显示全部楼层
[HTML]
'/^[a-zA-Z0-9[:space:][:cntrl:][:punct:]]+$/{ print $0 }'
[/HTML]

贴个小文件上来,看看是哪里不行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-27 21:19:01 | 显示全部楼层
呵呵,该才换了台机器试了一下,可以的。
可能是locale的问题。
测试通过的那台机器
LANG=POSIX
LC_CTYPE="OSIX"
LC_NUMERIC="OSIX"
LC_TIME="OSIX"
LC_COLLATE="OSIX"
LC_MONETARY="OSIX"
LC_MESSAGES="OSIX"
LC_PAPER="OSIX"
LC_NAME="OSIX"
LC_ADDRESS="OSIX"
LC_TELEPHONE="OSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
回复 支持 反对

使用道具 举报

发表于 2006-3-28 09:51:58 | 显示全部楼层
难道就没有匹配中文的正则吗?郁闷。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2006-3-29 17:17:29 | 显示全部楼层
'/^[a-zA-Z0-9~!@#$%^&*()_+`;":<>,./?|\\      ]+$/
请老大分析一下这些匹配关系
^[]是以[]内的匹配开头的,并且+来匹配一次或者多次来结尾$
[]内的a-zA-Z0-9是匹配大小写字符和数字
~!@#$%^&*()_+`;":<>,./?|\\ 这就开始晕了,请解释一下。谢谢~!
回复 支持 反对

使用道具 举报

发表于 2006-3-29 23:09:33 | 显示全部楼层
那是标点符号,用这个也行[:punct:]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表