码迷,mamicode.com
首页 > 其他好文 > 详细

匹配特定数字串

时间:2015-09-08 00:02:07      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

定义一个file.txt文件,包含内容如下

$ cat file.txt 
987-123-4567
123 456 7890
(123) 456-7890
222122-213-321
21
231-456 7894
321 984-4984
(218)-393-3399
(001) 345-0000

要求打印出格式如 (xxx) xxx-xxxx or xxx-xxx-xxxx. (x means a digit)的行

grep -E "[[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]][[:digit:]]|([[:digit:]][[:digit:]][[:digit:]]) [[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]][[:digit:]]" file.txt

得到:

987-123-4567

321 984-4984

这样搜不到

(001) 345-0000

grep -E "\([[:digit:]][[:digit:]][[:digit:]]\) [[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]][[:digit:]]|[[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]][[:digit:]][[:digit:]]" file.txt

得到

987-123-4567

(123) 456-7890

(001) 345-0000

把括号转义一下,括号两边都需要转义;可以满足条件

这种做法看起来太笨了,有多少个数字就得重复多少次[[:digit:]]

这是局部条件符合就会匹配,比如111(001) 345-0000也能匹配进来;并不是完全匹配的

 

换一种做法,用正则来匹配数字

cat file.txt | grep -Eo ‘^(\([0-9]{3}\) ){1}[0-9]{3}-[0-9]{4}$|^([0-9]{3}-){2}[0-9]{4}$‘

这里有两个匹配条件

^(\([0-9]{3}\) ){1}[0-9]{3}-[0-9]{4}$ 匹配形如(123) 456-7890的电话号码

^([0-9]{3}-){2}[0-9]{4}$ 匹配形如987-123-4567的电话号码

#using sed

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

#using grep in Perl mode

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

 

匹配特定数字串

标签:

原文地址:http://www.cnblogs.com/rustfisher/p/4790135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!