193. 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.

For 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


重点是命令+正则表达式
1. egrep用正则表达式选择含有符合要求的字符串的行

egrep '^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}\$'  file.txt

其中,egrep等价于grep -e,支持扩展的正则表达式,因为这里用了(|)。
^,$分别用来确定字符串的开始和结尾;对于123-或者(123)空格,用(word1|word2)兼容,即
([0-9]{3}-|\([0-9]{3}\) );当然[0-9]可以用[[:digit:]] 代替
2. awk的使用正则,字符匹配
awk '/word/' file,其中//中的就是正则表达的字符串

awk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}\$/' file.txt #或
awk '/^([[:digit:]]{3}-|\([[:digit:]]{3}\) )[[:digit:]]{3}-[[:digit:]]{4}$/' file.txt

3. sed+正则匹配
sed -r: 表示支持正则表达; -n: 表示安静模式,只输出处理的那一行。

sed -n -r '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt

其中,//中的是用正则表达式表示的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值