算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试 算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从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 表示一个数字)
你也可以假设每行前后没有多余的空格字符。
示例
代码语言:javascript复制示例:
假设 file.txt 内容如下:
987-123-4567
123 456 7890
(123) 456-7890
你的脚本应当输出下列有效的电话号码:
987-123-4567
(123) 456-7890
解题
思路一:grep命令
grep命令用于查找文件里符合条件的字符串,其中-P选项可以让grep使用perl的正则表达式语法。
Bash脚本:
代码语言:javascript复制grep -P '^(d{3}-|(d{3}) )d{3}-d{4}$' file.txt
思路二:sed命令
sed命令是利用script来处理文本文件,其中-n选项仅显示script处理后的结果,取消将模式空间中的内容自动打印出来,-r选项表示在脚本中使用扩展正则表达式。
Bash脚本:
代码语言:javascript复制sed -n -r '/^([0-9]{3}-|([0-9]{3}) )[0-9]{3}-[0-9]{4}$/p' file.txt
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。