实验楼--第十三章挑战

挑战:数据提取

介绍

小明在做数据分析的时候需要提取文件中关于数字的部分,同时还要提取用户的邮箱部分,但是有的行不是数组也不是邮箱,现在需要你在 data2 这个文件中帮助他用正则表达式匹配出数字部分和邮箱部分。

数据文件可以使用以下命令下载:

$ cd /home/shiyanlou
$ wget https://labfile.oss.aliyuncs.com/courses/1/data2

下载后的数据文件路径为 /home/shiyanlou/data2。

目标

  1. 在文件 /home/shiyanlou/data2 中匹配数字开头的行,将所有以数字开头的行都写入 /home/shiyanlou/num 文件。
  2. 在文件 /home/shiyanlou/data2 中匹配出正确格式的邮箱,将所有的邮箱写入 /home/shiyanlou/mail 文件,注意该文件中每行为一个邮箱。

提示

  1. 邮箱的格式匹配
  2. 注意符号 . 的处理

我的答案

看到这题首先没有打算用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

猜你喜欢

转载自blog.csdn.net/weixin_43301333/article/details/114149598