LinuxSir.cn,穿越时空的Linuxsir!

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

请教正则表达式一问题

[复制链接]
发表于 2007-4-4 11:52:39 | 显示全部楼层 |阅读模式
我想在文本中寻找email文件
文本文件内容如下:
heefan@gmail.com
yadac@yhoo.com.in

我想找最后为.com的邮件
但是我用$和\>定位最后部分,可是不能得到效果,请问应该如何处理呢?
发表于 2007-4-4 13:43:24 | 显示全部楼层
  1. grep '\.com$'  file
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-4 16:36:51 | 显示全部楼层
谢谢,是这样的。
我想在文本中找邮件,用如下形式
grep '^[a-zA-Z]*@*\.(com|net|cn)$' mail > output
我想找,开头是字母,中间有@,最后是com,net ,cn 结尾的邮件。
可是没有任何输出。
当然,我的mail文件里有存放一些邮件地址。

请问问题出现在什么地方呢?
回复 支持 反对

使用道具 举报

发表于 2007-4-4 17:23:40 | 显示全部楼层
egrep '^[a-zA-Z]*@.*\.(com|net|cn)$'
回复 支持 反对

使用道具 举报

发表于 2007-4-5 09:27:43 | 显示全部楼层
grep "^[a-zA-Z]\+@.\+\.\(com\|net\|cn\)$" mail
注意转义字符,这条命令能够正常工作。有关正则表达式的详情,可以参看ABS里面正则表达式并且结合man手册,比如对于+的使用是需要在之前添加转义字符\的。
回复 支持 反对

使用道具 举报

发表于 2007-4-5 09:30:09 | 显示全部楼层
还有就是,我所写的表达式并不会匹配如下的邮件地址
@sdkfj.com
skldfj@.com
回复 支持 反对

使用道具 举报

发表于 2007-4-9 01:15:22 | 显示全部楼层
楼上正解. ( ) | 之前都要加转义符号 \ 否则是匹配( ) | 了.
grep '[a-zA-Z][[: print:]]*@[[: print:]]*\(com\|net\|cn\)$' mail > output  
回复 支持 反对

使用道具 举报

发表于 2007-4-9 12:52:17 | 显示全部楼层
Iambitious兄的好像有点BUG比如这样的邮件地址Iambitious@  .com或者Iambitious  @gmail.com或者Iambitious @ gmail.com就会被匹配到。尝试我在Iambitious兄的基础上修改的: grep '[a-zA-Z][^ ]\+@[^ ].\+\.\(com\|net\|cn\)$' mail

补充:我的好像也有点问题,因为邮件中不能出现“空格”所以只想起了空格而忘记了还有其它的空格形式比如制表符以及新行,所以修改如下:
grep '[a-zA-Z][^[:space:]]\+@[^[:space:]].\+\.\(com\|net\|cn\)$' mail

----------------------------------------------------------------------------
不过我有了一个新问题:正确的邮件地址中都不应该出现哪些字符呢?
回复 支持 反对

使用道具 举报

发表于 2007-4-27 23:44:52 | 显示全部楼层
Post by lakerhy
楼上正解. ( ) | 之前都要加转义符号 \ 否则是匹配( ) | 了.

感觉re有点混乱啊,对于( )有些又要用转义,有些又不用。
回复 支持 反对

使用道具 举报

发表于 2007-4-27 23:50:33 | 显示全部楼层
我记得 | 是不需要转义的啊。。。呵呵。

忘记哪几个要转移了,不过 () 是要的。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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