​LeetCode刷题实战193:有效电话号码

程序IT圈

共 1529字,需浏览 4分钟

 · 2021-02-26

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 有效电话号码,我们先来看题面:
https://leetcode-cn.com/problems/valid-phone-numbers/

Given a text file file.txt that contains list of phone numbers (one per line), write a one liner bash script to print all valid phone numbers.


You may assume that a valid phone number must appear in one of the following two formats: (xxx) xxx-xxxx or xxx-xxx-xxxx. (x means a digit)

题意



给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个 bash 脚本输出所有有效的电话号码。

你可以假设一个有效的电话号码必须满足以下两种格式:(xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一个数字)

你也可以假设每行前后没有多余的空格字符。

示例


示例:

假设 file.txt 内容如下:
987-123-4567
123 456 7890
(123) 456-7890

你的脚本应当输出下列有效的电话号码:

987-123-4567
(123) 456-7890



解题


思路一:grep命令

grep命令用于查找文件里符合条件的字符串,其中-P选项可以让grep使用perl的正则表达式语法。

Bash脚本:

grep -P '^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$' file.txt


思路二:sed命令

sed命令是利用script来处理文本文件,其中-n选项仅显示script处理后的结果,取消将模式空间中的内容自动打印出来,-r选项表示在脚本中使用扩展正则表达式。
Bash脚本:
sed -n -r '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt


好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-180题汇总,希望对你有点帮助!
LeetCode刷题实战181:超过经理收入的员工
LeetCode刷题实战182:查找重复的电子邮箱
LeetCode刷题实战183:从不订购的客户
LeetCode刷题实战184:部门工资最高的员工
LeetCode刷题实战185:部门工资前三高的所有员工
LeetCode刷题实战186:翻转字符串里的单词 II
LeetCode刷题实战187:重复的DNA序列
LeetCode刷题实战188:买卖股票的最佳时机 IV
LeetCode刷题实战189:旋转数组
LeetCode刷题实战190:颠倒二进制位
LeetCode刷题实战191:位1的个数
LeetCode刷题实战192:统计词频

浏览 43
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报