flowingfog

::  ::  ::  ::  ::
 50 随笔 :: 0 文章 :: 0 评论
 分析 难度 易 来源 https://leetcode.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) You may also assume each line in the text file must not contain leading or trailing white spaces. Example: Assume that file.txt has the following content: 987-123-4567 123 456 7890 (123) 456-7890 Your script should output the following valid phone numbers: 987-123-4567 (123) 456-7890 解答 https://leetcode.com/problems/valid-phone-numbers/discuss/55478/Grep-e-solution-with-detailed-explanation-good-for-those-new-to-regex 1 grep -e '$^[0-9]\{3\}-[0-9]\{3\}-[0-9]\{4\}$' -e '$^([0-9]\{3\})[ ]\{1\}[0-9]\{3\}-$$[0-9]\{4\}$$$' file.txt In Bash, we use \ to escape next one trailing character; ^ is used to denote the beginning of a line $is used to denote the end of a line {M} is used to denote to match exactly M times of the previous occurence/regex (...) is used to group pattern/regex together Back to this problem: it requires us to match two patterns, for better readability, I used -e and separate the two patterns into two regexes, the first one matches this case: xxx-xxx-xxxx and the second one matches this case: (xxx) xxx-xxxx 加上-P（使用Perl的正则引擎）即可过滤出目标数据 1 grep -P '^(\d{3}-|$\d{3}$ )\d{3}-\d{4}$' file.txt 注意上方的空格  1 grep '^(\d{3}-|$\d{3}$[ ]{1})\d{3}-\d{4}\$' file.txt 这里使用[ ]{1}表示一个空格 posted on 2018-11-26 20:30  flowingfog  阅读(180)  评论(0)  编辑  收藏