193. Valid Phone Numbers有效的电话号码Bash

给定一个包含电话号码列表(每行一个)的文本文件file.txt,编写一个线性衬里脚本来打印所有有效的电话号码。

>假定有效的电话号码必须以以下两种格式之一出现:(xxx)xxx-xxxx或xxx-xxx-xxxx。 (x表示一个数字)

>还可以假定文本文件中的每一行都不得包含前导或尾随空格

假设file.txt具有以下内容:

987-123-4567

123 456 7890

(123) 456-7890

您的脚本应输出以下有效电话号码:

987-123-4567

(123) 456-7890

# 1.0 Read from the file file.txt and output all valid phone numbers to stdout.
cat file.txt | grep -P "^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$"
# 2.0 Read from the file file.txt and output all valid phone numbers to stdout.
grep -P '^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$' file.txt

没学过bash,强行解释一波:


cat file.txt:一次性读取文件

|: 上一条命令的输出,作为下一条命令参数

grep:在一个或多个文件中搜索字符串模板,命令格式:grep [option] pattern file

grep -P: 匹配器,将PATTERN解释为Perl正则表达式。 这是高度实验性的,grep -P可能会警告未实现的功能。Interpret  PATTERN as a Perl regular expression.  This is highly experimental and grep -P may warn of unimplemented features.

^:表示一行的开始

\:反斜线。用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符

d:限制只能是数字

{3}:表示长度是3

'(\d{3}-:表示3个数字带-

|(\d{3}) )':|表示或者,同样三个数字带空格

$: 在grep里面指匹配的字符串的结尾。与开头的^呼应,就是结束的意思。

PS: 文中的d可以用[0-9]替换,一样的效果

 

你可能感兴趣的:(Leetcode(Easy),shell,bash,leetcode)