Shell 解析文本中的电子邮件地址和URL,解析电子邮件地址和URL是一项常见任务。正则表达式能够帮助我们简化相关的工作。
实战演练
能够匹配电子邮件地址的正则表达式如下:
[A-Za-z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}
例如:
$ cat url_email.txt
this is a line of text contains,<email> #slynux@slynux.com.
</email> and email address, blog "http://www.google.com",
test@yahoo.com dfdfdfdddfdf;cool.hacks@gmail.com<br />
<a href="http://code.google.com"><h1>Heading</h1>
因为用到了扩展正则表达式(例如+
),所以得使用egrep
命令:
$ egrep -o '[A-Za-z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}'
url_email.txt
slynux@slynux.com
test@yahoo.com
cool.hacks@gmail.com
匹配HTTP URL的egrep
正则表达式如下:
http://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}
例如:
$ egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}" url_email.txt
http://www.google.com
http://code.google.com
工作原理
如果逐个部分进行设计,这些正则表达式其实很简单。在匹配电子邮件地址的正则表达式中,我们都知道电子邮件地址可以采用name@domain.some_2-4_letter_suffix
这种形式。那么,在编写正则表达式时也要遵循同样的规则:
[A-Za-z0-9.]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}
[A-Za-z0-9.]+
表示在表示字面意义的字符@
出现之前,[]
中的字符需要出现一次或多次(这也正是+
的含义)。接下来就是域名,它是由包含字母或数字的字符串、点号以及2至4个字母组成的。模式[A-Za-z0-9.]+
能够匹配字母-数字字符串。\.
能够匹配必须出现的字面意义上的点号。[a-zA-Z]{2,4}
能够匹配长度为2、3或4的字符串。
匹配HTTP URL与匹配电子邮件地址类似,只是不需要匹配name@
部分:
http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}
学习本章内容可以参考如何使用正则表达式 和 sed 命令 相关知识。