【问题标题】:use "grep" command to find txt files containing telephone number使用“grep”命令查找包含电话号码的 txt 文件
【发布时间】:2011-02-28 05:37:46
【问题描述】:

使用“grep”命令查找包含电话号码的 txt 文件。

电话号码格式可以是:

"***-*******"
"**********"
"*** *******"
"***-***-****"

怎么写?

【问题讨论】:

  • 我认为您要使用的正则表达式是 /\d{3}[\s\-]?\d{3}-?\d{4}/

标签: linux unix command-line grep


【解决方案1】:

数字是 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 并可能对第二个分隔符使用反向引用
  • 如果你真的给出了示例 grep 命令,我会给你一个 +1。 (提示,提示)。
【解决方案2】:
$ 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

【讨论】:

    猜你喜欢
    • 2011-08-07
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多