Shell 解析文本中的电子邮件地址和URL

Shell 解析文本中的电子邮件地址和URL,解析电子邮件地址和URL是一项常见任务。正则表达式能够帮助我们简化相关的工作。

Shell解析文本中的电子邮件地址和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 命令 相关知识。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Shell 实例