挑战:数据提取
介绍
小明在做数据分析的时候需要提取文件中关于数字的部分,同时还要提取用户的邮箱部分,但是有的行不是数组也不是邮箱,现在需要你在 data2 这个文件中帮助他用正则表达式匹配出数字部分和邮箱部分。
数据文件可以使用以下命令下载:
$ cd /home/shiyanlou
$ wget https://labfile.oss.aliyuncs.com/courses/1/data2
下载后的数据文件路径为 /home/shiyanlou/data2。
目标
- 在文件 /home/shiyanlou/data2 中匹配数字开头的行,将所有以数字开头的行都写入 /home/shiyanlou/num 文件。
- 在文件 /home/shiyanlou/data2 中匹配出正确格式的邮箱,将所有的邮箱写入 /home/shiyanlou/mail 文件,注意该文件中每行为一个邮箱。
提示
- 邮箱的格式匹配
- 注意符号 . 的处理
我的答案
看到这题首先没有打算用grep去做,而是打算用sed(纯粹学完sed觉得它很nb),然后墨迹了半天发现邮箱有点难写,但是还好这题目简单啊,直接匹配"@"
就可以了…
匹配数字
这个简单
sed "/^[^0-9]/d" data2 > num
匹配邮箱
sed -n "/.@/p" data2 > mail
本来想匹配.com
,主要一直不知道"."
怎么处理,转义不行。网上暂时也找不到用简单正则方案能匹配的,所以貌似这里只能用grep的ERE?还望有人指点(如果有人看到的话…)
反正过了可还行…
参考答案
grep '^[0-9]' /home/shiyanlou/data2 > /home/shiyanlou/num
grep -E '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$' /home/shiyanlou/data2 > /home/shiyanlou/mail