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> #[email protected].
</email> and email address, blog "http://www.google.com",
[email protected] dfdfdfdddfdf;[email protected]<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
[email protected]
[email protected]
[email protected]

匹配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

工作原理

如果逐个部分进行设计,这些正则表达式其实很简单。在匹配电子邮件地址的正则表达式中,我们都知道电子邮件地址可以采用[email protected]_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 命令 相关知识。

最后修改:2024 年 05 月 20 日
如果觉得我的文章对你有用,请随意赞赏