【问题标题】:Finding all phone numbers查找所有电话号码
【发布时间】:2015-01-13 10:20:45
【问题描述】:

所以我有这个file.txt,其中包含网页的源代码。我正在尝试将file.txt 中的所有电话号码放入每行中的另一个文件中。源代码中的所有电话号码都卡在字符串tel:; 之间

到目前为止,我已经成功地将网页的源代码保存到 file.txt 中:

echo $(wget http://www.some-web-page.com -q -O ) > file.txt

仅打印出我使用的所有电话号码:

sed -e 's/tel:\(.*\);/' file.txt

但我得到了整个 file.txt?

【问题讨论】:

    标签: regex linux bash sed substring


    【解决方案1】:

    您可以简单地使用 grep 代替 sed 。我选择grep 的原因是,grep 是一个将每个匹配项打印在单独的行中的工具。

    grep -oP 'tel:\K.*?(?=;)' file.txt
    

    正则表达式:

    tel:                     'tel:'
    \K                       '\K' (resets the starting point of the
                             reported match)
    .*?                      matches any character except \n (0 or more times) non-greedily
    (?=                      look ahead to see if there is:
      ;                        ';'
    )                        end of look-ahead
    

    更新:

    $ cat file
    tel:02134343, 3646848393; tel:02134343;
    tel:02134344;
    $ grep -oP '(?:tel:|(?<!^)\G)\K\d*(?=[^;\n]*;)' file
    02134343
    3646848393
    02134343
    02134344
    

    【讨论】:

    • 感谢完美!有没有办法升级这个,例如:电话:02134343、3646848393;这样我就可以在一行中有 02134343,在下一行中有 3646848393?
    • 如何修改 grep -oP 'tel:\K.*?(?=;)' file.txt 以便查找字符串 tel: 和 bbr 之间的电话号码?
    • 只需从(?=) 中删除; 并将其替换为bbr,例如grep -oP 'tel:\K.*?(?=bbr)'
    • 对不起我的错误我的意思是如何替换;带有一些包含空格的字符串,因为它不适用于此 grep -oP 'tel:\K.*?(?= bbr)'
    • 在收到好的答案后堆积额外的要求并不是好的形式。也许此时您应该接受其中一个答案并发布一个新问题,其中包含清晰详尽的输入和输出示例。
    【解决方案2】:

    这是另一种以特殊格式显示电话号码的解决方案

    grep -Po 'tel:\d{3}[\s\-_]?\d{3}[\s\-_]?\d{4}' file.txt|cut -f2 -d':'
    

    它会提取如下格式的数字

    ***-*******
    **********
    *** *******
    ***-***-****
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多