【发布时间】:2011-02-28 05:37:46
【问题描述】:
使用“grep”命令查找包含电话号码的 txt 文件。
电话号码格式可以是:
"***-*******"
"**********"
"*** *******"
"***-***-****"
怎么写?
【问题讨论】:
-
我认为您要使用的正则表达式是 /\d{3}[\s\-]?\d{3}-?\d{4}/
标签: linux unix command-line grep
使用“grep”命令查找包含电话号码的 txt 文件。
电话号码格式可以是:
"***-*******"
"**********"
"*** *******"
"***-***-****"
怎么写?
【问题讨论】:
标签: linux unix command-line grep
数字是 3 位数字 (\d{3})、空格或破折号 [\s-]、3 位数字 (\d{3})、空格或破折号 [\s-]、4 位数字 (\d{4 })。
grep '\d{3}[\s\-]{0,1}\d{3}[\s\-]{0,1}\d{4}' infile.txt
编辑 @Mark 和 Jed - 好建议 - 根据建议进行更新
【讨论】:
123 - - - - ------456 -- ---7890 这样的#s,这将是一个非常愚蠢的电话号码格式。我会将 *s 更改为 ?s 并可能对第二个分隔符使用反向引用
$ cat file
test 1234567890 test
blah 123-4567890 junk junk 546-3345622 junk
blah blah 123 4575463 sdfsljads 123_456_4356 end
123--4567890
$ grep -Po '\d{3}[\s\-_]?\d{3}[\s\-_]?\d{4}' file
1234567890
123-4567890
546-3345622
123 4575463
123_456_4356
$ ruby -ne 'puts $_.scan(/\d{3}[\s\-_]?\d{3}[\s\-_]?\d{4}/)' file
1234567890
123-4567890
546-3345622
123 4575463
123_456_4356
【讨论】: