快捷搜索: 王者荣耀 脱发

【linux】函数grep正则表达式匹配邮箱地址

这个问题是看了很多文章总结而得,还没有了解shell编程的朋友们可以来看看,自己的一些见解,欢迎指出错误和不足。话不多说,我们直接进入主题!

如何直接用命令匹配邮箱地址?

首先我们要知道常见的邮箱格式:

1) 邮箱必须有一个@

2) 邮箱@前缀由数字或字母开头,即 [a-zA-Z0-9]@

3) 邮箱@前缀2由多个字母、数字、短横线-、下划线_、英文句号.组成,即 [a-zA-Z0-9][a-zA-Z0-9-._]+@ (+表示重复1到多次)

4) 邮箱@后缀由两级或三级域名组成,其中每个域名中间由英文句号“.”隔开, 而每级域名都是由字母或数字组成,即@([a-zA-Z0-9]+.[a-zA-Z0-9]{1,2}+$,{}表示作为一个整体重复1到2次

接下来我们进行实操,先利用vi手动新建一个文件email.txt,存两个邮箱地址,一个合格另一个不合格,后续用以验证正则表达式。

【root@localhost ~】vi email.txt

##输入i后就可以手动输入你想要的内容
##完成后ESC + :+ wq 保存退出

查看一下当前的email.txt内容

接下来需要注意的是,grep 支持三种正则表达式引擎,分别用三个参数指定:

-G POSIX 基本正则表达式,BRE -E POSIX 扩展正则表达式,ERE -P Perl 正则表达式,PCRE

在这里我们要接触到扩展正则表达式,当使用grep函数时采用egrep 和 grep -E都可以

【root@localhost ~】egrep -n [a-zA-Z0-9._]+@[a-zA-Z0-9._]+.[a-zA-Z0-9]{1,3} email.txt

##-n 表示输出该行号

结果如下,

多输入几个地址进行测试

简单的邮箱地址基本可以检测成功,希望这篇文章能对你有所帮助~

ps:不是很明白为什么我的[a-zA-Z0-9._]加上短横线 - 会报错超出范围,求大佬答疑解惑!

经验分享 程序员 微信小程序 职场和发展